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


View this message in context: BUG? Comparing of words error.
Sent from the AVR - gcc forum at Nabble.com.
_______________________________________________
AVR-GCC-list mailing list
AVR-GCC-list@nongnu.org
http://lists.nongnu.org/mailman/listinfo/avr-gcc-list

Reply via email to