【发布时间】:2012-08-02 05:10:06
【问题描述】:
在 Atmel 处理器的 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 处理器系列?这个帖子对avrfreaks.net/…有帮助吗?
-
ATmega,但 eeprom 处理是相同的。该线程仅更详细地描述了我在上一段中写的内容(如果我在声明
eeprom int a=42;处为 eeprom 变量赋值,这意味着该值将被添加到生成的 eeprom 文件中,该文件只会写入一次设备。它不会在每次程序启动时实际写入 eeprom,这是一个非常好的功能)。如果我在单独的命令中分配了值,它将被编译为写入 eeprom 的指令。感谢您的链接,如果我在这里没有得到任何可用的东西,我会尝试在那里询问。 -
请解释一下你实际上想要做什么,听起来你走错了路,可以做一些事情。 Atmel 与此无关。您想控制特定地址的 eeprom 空间中的值吗?您想控制不在 eeprom 中的寄存器/内存中的值吗?如果后者你想控制地址,以便你的程序一旦启动就可以有一个指向该寄存器/内存位置的变量(不在 eeprom 中)?
-
@dwelch:同一个 eeprom 文件将被多个程序使用。我想保证在所有程序中都会读取相同的内容。