[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
RE: [avr-gcc-list] "Volatile"
From: |
David Harper |
Subject: |
RE: [avr-gcc-list] "Volatile" |
Date: |
Fri, 15 Apr 2005 16:23:21 -0500 |
I'm certainly no expert, but when I'm modifying variables that could also
potentially be modified at the interrupt level, I disable interrupts before I
change the variable and reenable them afterwards.
Dave
---------------
Dave Harper Chiaro Networks
972-739-7919 (voice) 251 Renner Pkwy.
972-739-8020 (fax) Richardson, TX 75080
-----Original Message-----
From: Keith Gudger [mailto:address@hidden
Sent: Friday, April 15, 2005 3:48 PM
To: address@hidden
Subject: [avr-gcc-list] "Volatile"
Those of us on this list all know the "volatile" drill - it's FAQ #1.
This is sort of the same issue, and I'm wondering if the code that "got
me" is as obvious as the other volatile stuff.
I have a volatile variable, "Flags", that is set and cleared in many
routines, including an interrupt. Here is the disassembly for the
Flags_Clear function:
00000f3e <Flags_Clear>:
f3e: 98 2f mov r25, r24
f40: 90 95 com r25
f42: 80 91 a4 00 lds r24, 0x00A4
f46: 89 23 and r24, r25 ; <- interrupt here
f48: 80 93 a4 00 sts 0x00A4, r24
f4c: 08 95 ret
The interrupt occured right before f46, and set the flag. The interrupt
pushed and popped r24 & r25's values, so when the interrupt returned to
f46, the flags were restored to their *previous* state (the flag unset!
Ack! I'm screwed!)
Two questions: 1) Is this something I should have learned in Embedded
101? If so, I"ll slink quitely away... and if not.. 2) How would the
experts on this list have prevented this?
Thank you.
Keith
_______________________________________________
AVR-GCC-list mailing list
address@hidden
http://lists.nongnu.org/mailman/listinfo/avr-gcc-list
RE: [avr-gcc-list] "Volatile", Dave Hansen, 2005/04/15
Re: [avr-gcc-list] "Volatile", Douglas Dotson, 2005/04/15
Re: [avr-gcc-list] "Volatile", Graham Davies, 2005/04/15
RE: [avr-gcc-list] "Volatile",
David Harper <=
Re: [avr-gcc-list] "Volatile", Dean Hall, 2005/04/17