例如,在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)