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

#在链接器脚本中定义

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

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

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

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

    2 回复  |  直到 16 年前
        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。