【发布时间】:2016-02-29 12:07:12
【问题描述】:
我试图强制链接器(来自 XC32 的 ld)将相同的可执行代码放置在闪存的两个不同部分中。
该应用程序使代码可以作为独立应用程序运行,并且还可以使引导加载程序覆盖重置向量,然后可以分支到伪重置向量。
我的链接器脚本的相关部分是
MEMORY
{
kseg1_boot_mem : ORIGIN = 0xBFC00000, LENGTH = 0x480
bootload_boot_mem : ORIGIN = 0x9D1F0000, LENGTH = 0x480
}
SECTIONS
{
.reset 0xBFC00000 :
{
KEEP(*(.reset))
} > kseg1_boot_mem
.bootloadreset 0x9D1F0000 :
{
KEEP(*(.reset))
} > bootload_boot_mem
}
使用它,0xBFC00000 处的区域按预期填充,但在 0x9D1F0000 处没有放置任何内容。我尝试将选项 --no-gc-sections 传递给链接器,但似乎没有任何区别。
我的问题是:是否可以强制链接器将相同的代码放入 2 个不同的部分,以及如何做到这一点?
【问题讨论】:
-
我会在构建系统中解决这个问题,方法是将相同的代码编译两次并进行适当的变体。它的效率有点低,但它只依赖于链接器中易于理解的行为。