I'd assume thi happens because you increment RotCount in an interrupt and interrupts are active while you are testing the condition. The AVR is an 8 bit CPu and the 16bit test will take a couple of instructions. As you are doing nothing else in the loop the chance is that the interrupt happens in the middle of the operation and you get inconsistent results.
A good place to discuss such problems is the GCC forum on avrfreks.net. Plenty of knowledgeable people around on avrfreaks !
Markus
On 1/18/06,
Flemming Steffensen (sent by Nabble.com) <[EMAIL PROTECTED]> wrote:
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
[email protected]
http://lists.nongnu.org/mailman/listinfo/avr-gcc-list
--
Markus Baertschi Phone: ++41 (21) 807 1677
Bas du Rossé 14b Fax : ++41 (21) 807 1678
CH-1163, Etoy Email: [EMAIL PROTECTED]
Switzerland Homepage: www.markus.org
_______________________________________________ AVR-GCC-list mailing list [email protected] http://lists.nongnu.org/mailman/listinfo/avr-gcc-list
