В компиляторе codevision для процессоров Atmel есть возможность указать адрес хранения глобальной переменной, например
int a @0x100; // will place the variable at the address 0x100 in RAM
Конечно, согласно стандарту C, переменные могут быть инициализированы при объявлении
int a=42;
. Однако я не нашел возможности сделать их обоих. int a @0x100 = 42
или int a = 42 @0x100;
не работают, они вызывают ошибки компиляции.
Вы можете спросить, почему это так важно, ведь можно было бы просто
int a @0x100;
int main()
{
a = 42;
//...
}
Однако, если у меня есть переменные в EEPROM , мне нужно их инициализировать, потому что это единственный способ автоматически сгенерировать файл eeprom со значениями в нем. Я не могу присвоить эти значения позже, потому что в этом случае они фактически будут записываться в eeprom при каждом запуске программы.