使用GNU ld,如何在多个区域自动传播代码?

问题描述 投票:0回答:1

我的情况是我的ROM只能占用某些不相交的内存区域。例如,假设我在链接器脚本中定义了以下内存区域:

MEMORY
{
  lowrom (rx)           : ORIGIN = 0x5000,  LENGTH = 0x2000
  midrom (rx)           : ORIGIN = 0xD000,  LENGTH = 0x1000
  hirom  (rx)           : ORIGIN = 0xF000,  LENGTH = 0x1000
}

我想要的是代码进入lowrom直到它满了,然后代码进入midrom直到它满了,然后剩下的代码进入hirom

GNU ld文档说The linker will not shuffle sections around to fit into the available regions.所以听起来我想做的事情是不可能的。

有某种解决方法吗?我想避免手动选择进入哪个内存区域的内容。

(或者是否有另一个支持此功能的开源可重定向链接器?)

memory embedded ld
1个回答
0
投票

我不认为有直截了当的方式。

我认为有一种解决方法。

让我用例子解释一下。

a)假设代码大小<0x2000字节,然后在链接器脚本中添加lowrom,如下所示。

记忆

{

lowrom(rx):ORIGIN = 0x5000,LENGTH = 0x2000

}

b)假设代码大小为0x2050字节,然后在链接器脚本中添加lowrom和midrom。

请注意,midrom仅分配所需的字节数

记忆

{

lowrom(rx):ORIGIN = 0x5000,LENGTH = 0x2000

midrom(rx):ORIGIN = 0xD000,LENGTH = 0x0050

}

这样你就可以继续了。

© www.soinside.com 2019 - 2024. All rights reserved.