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
AVR-GCC-list@nongnu.org
http://lists.nongnu.org/mailman/listinfo/avr-gcc-list

Reply via email to