[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

> > imply "atomic". In the first case, you need an atomic 

> > read-modify-write, and in the second you need an atomic read of a

> > value. In both cases you can achieve that by enclosing the the

> > access in a cli-sei pair. For example, the latter case can be fixed

> > 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 /

> 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


memcpy(&tryconnect,&rtc,sizeof(struct datetime)); 



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.

reply via email to

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