关于GNU Linker。
我有一个名为myVar
的变量。现在我希望我的变量放在内存中的某个地址。
我使用的编译器有一个__attribute__ ((blablabla))
可以解决问题。但是我决定使用链接器脚本。
从那时起,我设法将变量放在链接器脚本中的某个地址,如下所示:
myVar = 0xDEAD;
它确实有效。问题是链接器是愚蠢的,偶尔会在我的地址上部署其他变量。这两种方式都像union
中那样。
我认为不知何故,我需要告诉链接器这个长度的地址是被占用的,不应该被触及。
无论如何,我想你明白了。有什么帮助吗?
答案 0 :(得分:2)
我开始合并c源代码和链接器。
将新部分定义为链接描述文件,例如:
MEMORY
{
...
my_data (rwx) : ORIGIN = your_start_addr, LENGTH = section_length
}
SECTIONS
{
/* ... */
.myVarSection section_address :
{
KEEP(*(.mySection))
} > my_data
/* ... */
}
然后您可以在源文件中定义您的变量,如:
uint16_t __attribute__((section (".mySection"))) myVar = 0xDEAD;