This is the mail archive of the gcc-help@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

excluding constant variable from optimization


Hello,

I have a program for ARM microcontroller (barebone STM32). Default
linker script puts all global const variables in .text block, which is
later loaded into flash memory of the cpu. Processor I am using have
an ability to change contents of flash on the fly, what I want to
achieve is to read const variable from flash, that might been changed
from other location of the program.

Example

const uint16_t SIGNATURE = 0xA1A1; //default value

bool getSignature()
{
  return SIGNATURE == 0xA1A1;
}

void main(void)
{
  if(getSignature())
  {
    printf("NOT CHANGED");
  }else
  {
    printf("CHANGED");
  }
}


And this works well, but only with disabled optimizations -O0,
however, with -O1+ it all gets "eaten" into simple printf("NOT
CHANGED) because variable is constant and under normal circumstances
result is always the same.
I have tried various tricks to avoid optimizing of that varaible, and
some are working, but I don't like it and it gives me no guarantee it
will work in the future.

Is there any way to ensure this variable allocation in .text as it's
in source file (other then expilicitly disabling optimization for unit
it is defined in)?

Marcin


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]