在器CodeVision编译器为爱特梅尔处理器,有指定一个全局变量的存储地址的可能性,例如初始化变量并同时指定存储地址:是否有可能?
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。
哪些特定的Atmel处理器家族?这个线程是否有助于http://www.avrfreaks.net/index.php?name=PNphpBB2&file=viewtopic&p=102678? – 2012-08-02 10:04:16
ATmega,但eeprom处理是一样的。线程只是更详细地描述了我写在我的最后一段(如果我在声明'eeprom int a中给一个eeprom变量赋值= 42;'这意味着这个值将被添加到生成的eeprom文件中,该文件只会被写入一次。每次程序启动时它都不会写入eeprom,这是一个非常好的功能)。如果我已经在一个单独的命令中赋值,它将被编译为一个写入eeprom的指令。感谢您的链接,我会试着问,如果我没有在这里得到任何有用的东西。 – vsz 2012-08-02 11:33:36
请解释一下你实际上想要做的事情,听起来你已经走错了一条可以完成的事情。爱特梅尔与此无关。你想控制在特定地址的eeprom空间中的值吗?你想控制寄存器/内存中不在eeprom中的值吗?如果后者是你想控制地址,以便你的程序一旦启动可以有一个变量,指向该寄存器/内存位置(这是不是在eeprom)? – 2012-08-05 11:40:54