错误:初始化元素不是常量 - 链接到ROM符号时

时间:2017-03-25 02:26:44

标签: c gcc linker ld rom

我正在使用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,因为它不会被编译并内置到叠加层中。

0 个答案:

没有答案