如何通过链接描述文件在特定地址放置符号?

时间:2016-07-07 07:24:59

标签: c++ c linker embedded

关于GNU Linker。

我有一个名为myVar的变量。现在我希望我的变量放在内存中的某个地址。

我使用的编译器有一个__attribute__ ((blablabla))可以解决问题。但是我决定使用链接器脚本。

从那时起,我设法将变量放在链接器脚本中的某个地址,如下所示:

myVar  = 0xDEAD;

它确实有效。问题是链接器是愚蠢的,偶尔会在我的地址上部署其他变量。这两种方式都像union中那样。

我认为不知何故,我需要告诉链接器这个长度的地址是被占用的,不应该被触及。

无论如何,我想你明白了。有什么帮助吗?

1 个答案:

答案 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;