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