嵌入式设备有两个 SRAM 区域。首先位于 0x20000000,长度为 16k。然后在 0x20040000 处长度为 96k。在应用程序中,生成的 .bss 部分大小为 102k,因此它不完全适合任一 RAM 区域。它需要在两个区域之间划分。如何在 .ld 链接描述文件中执行此操作?
我知道有两个选项很糟糕。
选项 A:在脚本中按名称手动挑选对象并将其分成两部分。使用此选项,我感觉我正在手动执行链接器应该执行的操作。
选项 B:将属性放置到源代码中,以将某些对象放入特殊的 .bss2 部分。这个比选项A还要糟糕。
我希望链接器自动以最佳方式将对象分割到两个内存区域。我知道至少 IAR 链接器可以在没有任何手动工作的情况下以最佳方式完成此操作。
我从恩智浦员工那里得到了这样的信息:
“GNU 链接器以线性方式遍历链接器脚本文件,并且不会尝试填充内容或将变量分配到不同的内存区域。”
你必须创建一个bss2
部分并在启动文件中初始化它,然后选择选项 A 或 B。您也可以使用其他工具链,其中大多数都能够将变量分配到不同的内存部分
链接器脚本:
.bss2 :
{
. = ALIGN(4);
__bss2_start__ = .;
*(.bss2)
*(.bss2.*)
. = ALIGN(4);
__bss2_end__ = .;
} > RAM2 AT > RAM2
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)