|
From: | stevech |
Subject: | [avr-gcc-list] Q: volatile member of structure? |
Date: | Sun, 10 Apr 2005 17:37:53 -0700 |
Is this a minor bug? Some_structure contains 8
bit member - I'll call it "m" here. That structure has a typedef
and an instance in global memory - I'll call it "t" here. So t.m refers to that byte. Now since my interrupt
routine and my non-interrupt code both access t.m, I coded this, in my
non-interrupt code: x = t.m; while (x == (volatile
unsigned char) t.m) ; But the resultant assembly
code shows that t.m is not re-fetched from memory in the while loop. The while
loop just compares two registers in a two instruction loop. This is with the
default optimization setting. If I turn off optimization, t.m is indeed
repeatedly fetched from memory. So, shouldn't the cast force
the compiler to treat t.m as a volatile? Did I code the cast correctly? A cure, I suppose, is to declare the typedef'd
structure or its instance as volatile? |
[Prev in Thread] | Current Thread | [Next in Thread] |