2006/1/18, Flemming Steffensen (sent by Nabble.com) <[EMAIL PROTECTED]>: > Hi, > > This is my first post to this forum. I'm not even sure it's the right place > to post, but I think so. > > I'm trying this with an ATmega8, with a 500Hz oscillator connected at INT0, > using WinAVR (avr-gcc 3.4.3). > > I noticed the problem using this code: > ------------ > > unsigned short RotCount; > > SIGNAL(SIG_INTERRUPT0){ > RotCount++; > } > > void test(void){ > while (1){ > RotCount = 0; > while (RotCount < 1000) {} > RotCount = 0; > while (RotCount < 2000) {} > } > } > ------------ > > My problem is that the two inner whiles sometimes exists prematurly. > The one counting to 1000 sometimes exists at 768. > The one counting to 2000 sometimes exists at 1792. > Sometimes, means once every 5 to 20 loops. > > Looking at the numbers bineary, seems to give a pointer to an explanation; > > 0000 0011 1110 1000 = 1000 > 0000 0011 0000 0000 = 0768 > > 0000 0111 1101 0000 = 2000 > 0000 0111 0000 0000 = 1792 > > As can be seen, it appears that the while() exists when the high byte of the > two words matches. > > I didn't check the assembler output yet to see what might be happening, but > thought I'd ask you guys first. > > Any idear what might be at play here? > > Best regards, > Flemming >
This FAQ number 1. See: http://www.nongnu.org/avr-libc/user-manual/FAQ.html#faq_volatile Regards, -- Francisco _______________________________________________ AVR-GCC-list mailing list AVR-GCC-list@nongnu.org http://lists.nongnu.org/mailman/listinfo/avr-gcc-list