On Thursday 15 May 2008, Thomas D. Dean wrote:
> I changed the code to
>
> asm volatile("sbi 0x14, 4"::);
> atn_rad = atan2(cos_rad,sin_rad);
> asm volatile("cbi 0x14, 4"::);
>
> and the compiler still reordered the statements to put both the sbi
> and cbi statements before the atan().
>
> Changing atan2() to asin() or acos() gives the same incorrect result.
>
> Changing atan2() to sin() keeps the statements in the correct order.
>
> tomdean
If you declare atn_rad as a volatile, won't that make the order work out
correctly?
As someone already mentioned, the port accesses are already volatile, so you
should be able to use the C statments for port pin changing, and with a
volatile atn_rad, the compiler should keep everything in the source order.
Or else I misunderstand how volatile works.
Blake
_______________________________________________
AVR-GCC-list mailing list
[email protected]
http://lists.nongnu.org/mailman/listinfo/avr-gcc-list