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

Hai*_*iri 2 c c++ embedded linker

这是关于 GNU Linker 的。

我有一个(可以说)名为 的变量myVar。现在我希望我的变量被放置在内存中的某个地址。

我使用的编译器有一个__attribute__ ((blablabla))可以解决这个问题的方法。不过我决定使用链接描述文件。

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

myVar  = 0xDEAD;
Run Code Online (Sandbox Code Playgroud)

它确实有效。问题是链接器很愚蠢,偶尔会在我的地址上部署其他变量。两者在某种程度上都表现得像在union.

我认为我需要以某种方式告诉链接器这个长度的地址已被占用,不应该被触及。

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

LPs*_*LPs 6

我将开始合并 c 源代码和链接器。

在链接描述文件中定义一个新部分,例如:

MEMORY
{
  ...
  my_data       (rwx) : ORIGIN = your_start_addr, LENGTH = section_length
}

SECTIONS
{
  /* ... */

  .myVarSection section_address :
  {
    KEEP(*(.mySection)) 
  } > my_data

  /* ... */
}
Run Code Online (Sandbox Code Playgroud)

然后您可以在源文件中定义变量,如下所示:

uint16_t __attribute__((section (".mySection"))) myVar = 0xDEAD;
Run Code Online (Sandbox Code Playgroud)