对于嵌入式系统,我需要在固定地址放置一些数据结构,以便单独的控制CPU可以在已知位置访问它们。我正在使用嵌入式目标的链接描述文件来完成此操作,并为控制CPU使用相同地址的#defines。
因此,困扰我的是,这些地址常量因此在两个位置定义,即链接描述文件和头文件。我想只有一个。到目前为止,我提出的最佳解决方案是让Makefile在链接器脚本上运行cpp,允许它#include相同的头。
有没有更好的方法来实现这一目标?是否有一些鲜为人知的ld选项或链接器脚本的命名约定,它将自动通过cpp运行它?
答案 0 :(得分:4)
这不是您正在寻找的解决方案,但一种选择是利用构建系统来配置这些值。创建一个config.h.in和一个target.ld.in,它充当模板,让构建系统生成一个带有正确定义的config.h和一个带有正在构建的目标的正确地址的target.ld。 p>
我们在嵌入式系统中使用CMake,它支持这种事情。 GNU autoconf也有,但我个人从来都不喜欢它。
答案 1 :(得分:0)
您可以使用embedded-C特定构造@将对象放置在地址空间中的任何位置。
static struct SOMESTRUCT somestruct @ 0x40000000;
extern int someextint @ 0x3ffffffc;
char somebuffer[77] @ 0x80000000;
假设有32位MCU。