Dave Hansen wrote:
>  From: bernard.fou...@kuantic.com <mailto:bernard.fou...@kuantic.com>
> 
> [...re: volatile use cases...]
> 
> 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...

-- 
Paulo Marques
Software Development Department - Grupo PIE, S.A.
Phone: +351 252 290600, Fax: +351 252 290601
Web: www.grupopie.com

"There cannot be a crisis today; my schedule is already full."


_______________________________________________
AVR-GCC-list mailing list
AVR-GCC-list@nongnu.org
http://lists.nongnu.org/mailman/listinfo/avr-gcc-list

Reply via email to