【问题标题】:How to place constant at specific address with LD linker command file?如何使用 LD 链接器命令文件将常量放置在特定地址?
【发布时间】:2013-11-15 21:03:40
【问题描述】:

我正在使用基于 gcc 的工具链在嵌入式处理器上开发 c 应用程序。在我的应用程序中,我需要在特定的内存位置放置一个标志。我需要链接器命令文件语法方面的帮助来完成此操作。

【问题讨论】:

  • “放置旗帜”是什么意思?您是否必须在特定位置定义 C 变量,以便其他进程可以访问它?比如某种版本信息,或者一个启动选项?

标签: c gcc ld


【解决方案1】:

在你的 C 文件中写如下内容:

static int flag __attribute__ ((section (".flag"))) __attribute__ ((__used__)) = 6;

在您的自定义链接器脚本中,将 .flag 添加到所需的部分:

_flag_start = 0x00001234;

.flag _flag_start :
{
  KEEP(*(.flag)) ;
}

一定要在正确的地方添加这个,因为位置指针只能增长这个块之后位置指针将设置为_flag_start + [size of your flag],这意味着所有后续部分都将放置在该地址或更高地址。

当然,阅读并使用提供的手册David Grayson

【讨论】:

  • 感谢您的帮助。您的解决方案有效,但“KEEP”指令给了我一个链接器错误。也许是因为我正在使用的工具集。一旦我删除它,我就开始做生意了。
【解决方案2】:

有一次我不得不在 Cortex-M3 上执行此操作。我的链接器脚本很长、很复杂并且是私密的,但这个页面帮助我编写了它,您可能会发现它也很有用:

http://www.linuxselfhelp.com/gnu/ld/html_chapter/ld_3.html

我建议找到您的编译器默认使用的现有链接描述文件,然后通过在特定地址添加一个特殊部分来修改它,并将您的标志放在源代码的该部分中。

【讨论】:

  • 您的回答没有问题,但 parvus 给出了示例代码。感谢您提供文档链接!
猜你喜欢
  • 2011-12-07
  • 1970-01-01
  • 1970-01-01
  • 2016-11-09
  • 2016-06-18
  • 2018-11-09
  • 2012-12-30
  • 2010-12-16
  • 2023-03-12
相关资源
最近更新 更多