[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
FW: [avr-gcc-list] memcpy() : problem when passing destination pointer
From: |
Michael |
Subject: |
FW: [avr-gcc-list] memcpy() : problem when passing destination pointer |
Date: |
Thu, 12 Feb 2009 11:43:42 +1100 |
> >
> > In both of these cases, "volatile" is insufficient because it does
not
> > imply "atomic". In the first case, you need an atomic
> > read-modify-write, and in the second you need an atomic read of a
wide
> > value. In both cases you can achieve that by enclosing the the
variable
> > access in a cli-sei pair. For example, the latter case can be fixed
by
> > changing the routine to something like
> >
> > main() // or "int main(void)", yada yada
> > {
> > uint32_t ms; // does not need to be volatile
> >
> > do{ cli(); ms = Milliseconds; sei(); } while (ms < SOME_LIMIT);
> > }
>
> No, you can not. You need the macros in util/atomic.h because cli /
sei
> are not memory barriers and accesses to variables done inside a pair
> like that can be moved out by the compiler.
>
> Just search the archives for previous discussions and examples...
>
Could a pair disabling a specific interrupt (rather than global
interrupts) also be susceptible to the compiler re-ordering it outside
the pair?
For instance, in this example I read a structure modified by a timer
ISR:
ETIMSK &= _BV(OCIE3A);
memcpy(&tryconnect,&rtc,sizeof(struct datetime));
ETIMSK |= _BV(OCIE3A);
_____
I am using the Free version of SPAMfighter
<http://www.spamfighter.com/len> .
We are a community of 5.9 million users fighting spam.
SPAMfighter has removed 390 of my spam emails to date.
The Professional version does not have this message.
- RE: [avr-gcc-list] memcpy() : problem when passing destination pointer, (continued)
- RE: [avr-gcc-list] memcpy() : problem when passing destination pointer, Dave Hansen, 2009/02/11
- Re: [avr-gcc-list] memcpy() : problem when passing destination pointer, Paulo Marques, 2009/02/11
- Re: [avr-gcc-list] memcpy() : problem when passing destination pointer, Bernard Fouché, 2009/02/11
- Re: [avr-gcc-list] memcpy() : problem when passing destination pointer, David Kelly, 2009/02/11
- [avr-gcc-list] Re: memcpy() : problem when passing destination pointer, David Brown, 2009/02/11
- Re: [avr-gcc-list] memcpy() : problem when passing destination pointer, Graham Davies, 2009/02/11
- Re: [avr-gcc-list] memcpy() : problem when passing destination pointer, Joerg Wunsch, 2009/02/12
- Re: [avr-gcc-list] memcpy() : problem when passing destination pointer, Pertti Kellomäki, 2009/02/12
- [avr-gcc-list] Re: memcpy() : problem when passing destination pointer, David Brown, 2009/02/12
Message not available
FW: [avr-gcc-list] memcpy() : problem when passing destination pointer,
Michael <=