EmbDev.net

Forum: ARM programming with GCC/GNU tools Unwanted remove of unused variables with GCC


von Mattias (Guest)


Rate this post
useful
not useful
Hi,

I have a application where I need to declare a couple of variables in 
RAM but they will not be used in the application. I then use the RAM 
addresses for the variables, to change there values via a communication 
port.

Unfortunately GCC remove the variables if I don't use them, and I don't 
want to add "fake use" like "if(var_name){}"

I don't use any optimizing at the moment, the variables are removed 
anyway.

Is there a way to keep them?

Thanks

/Mattias

von Jörg W. (dl8dtl) (Moderator)


Rate this post
useful
not useful
Your fake use wouldn't help anyway, as it will be optimized away
as well.

Not sure how a "communication port" could change SRAM data without
the intervention of code, anyway, what you're probably looking for
is
1
__attribute__((used))

von Johann L. (gjlayde)


Rate this post
useful
not useful
I don't quite understand what you are doing... you use the address of a 
variable the variable is used (in general) and the object must not be 
canceled out. Can you give a small example in C to make it clear?

Jörg Wunsch wrote:
> Not sure how a "communication port" could change SRAM data without
> the intervention of code, anyway, what you're probably looking for
> is
>
>
1
__attribute__((used))

AFAIR this helps for functions, not for vars.

von Andreas B. (Guest)


Rate this post
useful
not useful
The attribute does help for variables:

> `used'
>      This attribute, attached to a variable, means that the variable
>      must be emitted even if it appears that the variable is not
>      referenced.

von Johann L. (gjlayde)


Rate this post
useful
not useful
Andreas B. wrote:
> The attribute does help for variables:
>
>> `used'
>>      This attribute, attached to a variable, means that the variable
>>      must be emitted even if it appears that the variable is not
>>      referenced.

Which version of gcc does this refer to?

von Andreas B. (Guest)


Rate this post
useful
not useful
Ah, got me there. I just looked in the current docs I had. Looking 
through the docs on gcc.gnu.org, it appears the 'used' attribute for 
variables appeared in version 4.2.

von Philipp B. (philipp_burch)


Rate this post
useful
not useful
Another way to ensure that the variables exist could be to declare them 
as volatile. Since they could be changed by hardware (for whatever 
reason) this should be the appropriate method. The problem sounds a bit 
strange to me, however.

von Big W. (tylr2005)


Rate this post
useful
not useful
Hi
Have you try the "volatile" keyword?

Please log in before posting. Registration is free and takes only a minute.
Existing account
Do you have a Google/GoogleMail account? No registration required!
Log in with Google account
No account? Register here.