1

对于嵌入式系统,我需要在固定地址放置一些数据结构,以便单独的控制 CPU 可以在已知位置访问它们。我正在使用嵌入式目标的链接器脚本来完成此操作,以及控制 CPU 的相同地址的#defines。

令我困扰的是,这些地址常量是在两个地方定义的,链接描述文件和头文件。我想只有一个。到目前为止,我想出的最佳解决方案是让 Makefile 在链接器脚本上运行 cpp,允许它#include 相同的标头。

有没有更好的方法来实现这一点?ld 是否有一些鲜为人知的选项或链接器脚本的命名约定,它将自动通过 cpp 运行它?

4

2 回答 2

4

这不是您正在寻找的解决方案,但一种选择是利用构建系统来配置这些值。创建一个 config.h.in 和一个 target.ld.in 作为模板,并让构建系统为您正在构建的目标生成一个具有正确定义的 config.h 和一个具有正确地址的 target.ld。

我们将 CMake 用于我们的嵌入式系统,它支持这种事情。GNU autoconf 也可以,但我个人从来没有真正喜欢过它。

于 2008-09-26T14:17:17.643 回答
0

您可以使用 emdedded-C 特定构造 @ 将对象放置在地址空间中的任何位置。

static struct SOMESTRUCT somestruct @ 0x40000000;
extern int someextint @ 0x3ffffffc;
char somebuffer[77] @ 0x80000000;

假设是 32 位 MCU。

于 2011-12-07T09:58:44.503 回答