[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [avr-gcc-list] memcpy() : problem when passing destination pointer
From: |
Vincent Trouilliez |
Subject: |
Re: [avr-gcc-list] memcpy() : problem when passing destination pointer |
Date: |
Wed, 11 Feb 2009 03:40:29 +0100 |
On Tue, 10 Feb 2009 21:30:30 -0500
"Graham Davies" <address@hidden> wrote:
> Unfortunately, yes. The compiler is allowed to optimize away stuff only if
> it can be "certain" that the entire program will operate in the same way.
> The compiler is not allowed to conclude that a variable is not accessed
> elsewhere in the program just because it can't see that access in one
> particular translation unit. The canonical example of where volatile is
> needed is the busy-wait loop on a variable that is written in a different
> context, i.e. do {} while ( flag == 0 ); where flag is set to one in an
> interrupt. The problem is not that the compiler can't see that flag is
> accessed in a different translation unit. The problem is that it can't see
> that such an access can occur at the same time as the do ... while loop is
> executing. The compiler reasons that as there is nothing inside the loop
> that changes flag, then the value of flag never changes once the loop is
> entered and so only needs to be tested once. If it is zero, the loop will
> run forever. So, flag must be declared volatile to tell the compiler to
> produce the repeating test.
>
> Graham.
Thanks Graham, very clear explanation. That's a nice paragraph
that would at home just as is, in the avr-libc manual somewhere
(FAQ?) ! ;-)
... where I think it used to be one upon a time ?
Wonder why it got removed...
--
Vince
- [avr-gcc-list] memcpy() : problem when passing destination pointer, Vincent Trouilliez, 2009/02/10
- Re: [avr-gcc-list] memcpy() : problem when passing destination pointer, Graham Davies, 2009/02/10
- Re: [avr-gcc-list] memcpy() : problem when passing destination pointer, Vincent Trouilliez, 2009/02/10
- Re: [avr-gcc-list] memcpy() : problem when passing destination pointer, Joerg Wunsch, 2009/02/10
- RE: [avr-gcc-list] memcpy() : problem when passing destination pointer, Weddington, Eric, 2009/02/10
- Re: [avr-gcc-list] memcpy() : problem when passing destination pointer, Vincent Trouilliez, 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, 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