我正在做一个嵌入式项目。我正在尝试使用 GNU 链接器来布局存储在外部 eeprom 中的一些变量。我通过分配 eeprom 变量来做到这一点
int __attribute__ ((section (".eeprom"))) eeprom_var1;
我还将为 eeprom 定义初始化变量,例如:
int __attribute__ ((section (".eeprom"))) eeprom_var2 = 0x42;
这个想法是;初始化 eeprom 时,正在运行的应用程序从 .text 部分中的某个位置复制初始化变量到 eeprom,就像初始化数据部分一样。显然,eeprom 变量无法读取/写入,但必须通过以下函数访问:
eeprom_read(data, &eeprom_var,sizeof(eeprom_var)).
到目前为止,一切都很好,
现在我想用另一个变量的指针初始化一个 eeprom 变量:
unsigned long long __attribute__ ((section (".eeprom"))) eeprom_var1 = 0x42;
unsigned short __attribute__ ((section (".eeprom"))) eeprom_var2 = (unsigned short )&eeprom_var1;
请注意,eeprom 使用 16 位地址空间
但这给出了以下错误
foo.c:4:1: error: initializer element is not constant
unsigned short __attribute__ ((section (".eeprom"))) eeprom_var2 = (unsigned short )&eeprom_var1;
^
这是因为转换为 (unsigned short) 被读取为作为初始化程序的操作,这在 C 中是不允许的。但是在 C++ 中,上面的表达式是可以的。
任何人都可以想到解决上述错误的方法吗?
/安德斯