代码之家  ›  专栏  ›  技术社区  ›  DGentry

#在链接器脚本中定义

  •  1
  • DGentry  · 技术社区  · 16 年前

    对于嵌入式系统,我需要在固定地址放置一些数据结构,这样一个单独的控制CPU就可以在一个已知的位置访问它们。我正在使用嵌入目标的链接器脚本来实现这一点,并为控制CPU定义相同的地址。

    因此,这些地址常量被定义在两个地方,即链接器脚本和头文件,这让我很困扰。我只想要一个。到目前为止,我提出的最佳解决方案是让makefile在链接器脚本上运行cpp,允许它包含相同的头文件。

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

    2 回复  |  直到 13 年前
        1
  •  3
  •   David Holm    16 年前

    这并不是您想要的解决方案,但有一种选择是利用构建系统来配置这些值。创建一个config.h.in和一个target.ld.in,其中充当模板并让构建系统生成一个config.h,其中包含正确的定义,以及一个target.ld,其中包含要构建的目标的正确地址。

    我们在嵌入式系统中使用cmake,它支持这种功能。GNU autoconf也是,但我从来没有真正喜欢过它。

        2
  •  0
  •   Olof Forshell    13 年前

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

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

    假设一个32位的MCU。