【发布时间】:2013-11-15 21:03:40
【问题描述】:
我正在使用基于 gcc 的工具链在嵌入式处理器上开发 c 应用程序。在我的应用程序中,我需要在特定的内存位置放置一个标志。我需要链接器命令文件语法方面的帮助来完成此操作。
【问题讨论】:
-
“放置旗帜”是什么意思?您是否必须在特定位置定义 C 变量,以便其他进程可以访问它?比如某种版本信息,或者一个启动选项?
我正在使用基于 gcc 的工具链在嵌入式处理器上开发 c 应用程序。在我的应用程序中,我需要在特定的内存位置放置一个标志。我需要链接器命令文件语法方面的帮助来完成此操作。
【问题讨论】:
在你的 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。
【讨论】:
有一次我不得不在 Cortex-M3 上执行此操作。我的链接器脚本很长、很复杂并且是私密的,但这个页面帮助我编写了它,您可能会发现它也很有用:
http://www.linuxselfhelp.com/gnu/ld/html_chapter/ld_3.html
我建议找到您的编译器默认使用的现有链接描述文件,然后通过在特定地址添加一个特殊部分来修改它,并将您的标志放在源代码的该部分中。
【讨论】: