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
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)) |
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.
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.
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?
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.
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.
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
Log in with Google account
No account? Register here.