avr-gcc-list
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [avr-gcc-list] BUG? Comparing of words error.


From: Markus Baertschi
Subject: Re: [avr-gcc-list] BUG? Comparing of words error.
Date: Wed, 18 Jan 2006 21:34:34 +0100

Hi Flemming,

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) <address@hidden> 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
address@hidden
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: address@hidden
  Switzerland                  Homepage: www.markus.org
reply via email to

[Prev in Thread] Current Thread [Next in Thread]