我正在使用GCC编译C代码并收到此错误。
目的是在链接器脚本中使用overlay(下面的这两个部分被覆盖),以便bootloader在加载到特定版本的硬件之前处理特定的硬件版本(hwver)。
const uint32_t _tableNum_U32_hwver1_ram = 12345;
extern const uint32_t _tableNum_U32_hwver1_rom;
__attribute__((section(".rodata.overlay.hwver1")))
const uint32_t tableNum_U32 = _tableNum_U32_hwver1_rom;
__attribute__((section(".rodata.overlay.hwver2.")))
const uint32_t tableNum_U32_hwver1 = _tableNum_U32_hwver1_ram; // this is in ram
void func(void)
{
...
x = tableNum_U32 +6; // example use
}
错误:初始化元素在上面的第4行不是常量。
_tableNum_U32_hwver1_rom位于ROM二进制文件中,该二进制文件使用 国旗:
-Wl --just-symbols="rom.sym"
如何解决此错误?
请注意我不能在这里使用#define,因为它不会被编译并内置到叠加层中。