初始化变量并同时指定存储地址:是否可能?

vsz*_*vsz 6 c embedded avr

例如,在Atmel处理器的codevision编译器中,可以指定全局变量的存储地址

int a @0x100; // will place the variable at the address 0x100 in RAM
Run Code Online (Sandbox Code Playgroud)

当然,根据标准C,变量可以在声明时初始化

int a=42;
Run Code Online (Sandbox Code Playgroud)

但是,我没有发现任何可能同时做到这两点.int a @0x100 = 42或者int a = 42 @0x100;不工作,它们会导致编译器错误.

你可能会问为什么这么做很重要,因为人们可以这样做

int a @0x100;

int main()
{
    a = 42;
    //...
}
Run Code Online (Sandbox Code Playgroud)

但是,如果我在EEPROM中有变量,我需要初始化它们,因为这是自动生成带有值的eeprom文件的唯一方法.我以后不能分配这些值,因为在这种情况下,它实际上会在程序的每个开始时将值写入eeprom.

小智 2

只要看看CodeVisionAVR帮助,

“如果必须在声明期间初始化使用 放置在特定地址的全局变量@ operator,则必须使用以下过程:

/* the variable will be stored in EEPROM at address 0x10 */

eeprom int abc @0x10;

/* and it will be initialized with the value 123 */ 

eeprom int abc=123; 
Run Code Online (Sandbox Code Playgroud)