【问题标题】:Memory sections in GNU linker script for Cortex-M4用于 Cortex-M4 的 GNU 链接描述文件中的内存部分
【发布时间】:2013-07-12 10:24:48
【问题描述】:

我很失望,因为我找不到有关内存分段的信息。我知道我应该将内存划分为 .text、.data、.bss、.stack 等基本部分,这些部分用于编译程序的目标文件。我知道还有更多其他部分,其中一些是 C 所必需的,而其他部分是 C++ 所必需的。我正在搜索有关链接描述文件中应包含哪些部分的信息?

【问题讨论】:

    标签: linker-scripts


    【解决方案1】:

    这取决于您的特定编译器和目标体系结构,哪些输出部分将存在或可能存在。在您的代码中,您可以使用任意名称定义输入部分。您的链接描述文件用于将文件中的符号或显式定义的输入部分中列出的符号绑定到输出部分。

    找出存在哪些输出部分的最佳方法是编译和链接示例应用程序,然后检查生成的映射文件(如果映射文件不是自动生成的,您应该调整链接器选项)。地图文件不是供其他工具使用的,而是作为对程序中发生的内容、位置、部分以及原因的可读描述。注意:在该映射文件中,您还会发现一些不属于您的程序的部分名称,并且不会转换为您的程序执行或使用的物理位,而是对您的调试器的帮助。

    当您没有将某些符号显式映射到输出节时,链接器通常只会在最后一个显式定义的节之后附加所有剩余的符号。

    因此,您还可以定义某种“包罗万象”部分,它肯定会吸引所有尚未分配的符号,然后验证输出部分是否为空。 即

    在 SECTIONS 块的末尾,添加

    SECTION
    {
      <snip>
    
      .mustbeempty
      {
        *(.*) ;
      }
      ASSERT( SIZEOF( .mustbeempty ) = 0 ) ;
    }
    

    有关链接器脚本的更多信息可以在许多地方找到:

    【讨论】:

      猜你喜欢
      • 2017-02-04
      • 2015-01-22
      • 2018-11-09
      • 2017-03-24
      • 1970-01-01
      • 2018-12-29
      • 1970-01-01
      • 2012-11-29
      • 2012-06-08
      相关资源
      最近更新 更多