Memory 使用GNULD,我如何在多个区域自动传播我的代码?

Memory 使用GNULD,我如何在多个区域自动传播我的代码?,memory,embedded,ld,Memory,Embedded,Ld,我的ROM只能占用某些不相交的内存区域。例如,假设我在链接器脚本中定义了以下内存区域: MEMORY { lowrom (rx) : ORIGIN = 0x5000, LENGTH = 0x2000 midrom (rx) : ORIGIN = 0xD000, LENGTH = 0x1000 hirom (rx) : ORIGIN = 0xF000, LENGTH = 0x1000 } 我想要的是让代码进入lowr

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

MEMORY
{
  lowrom (rx)           : ORIGIN = 0x5000,  LENGTH = 0x2000
  midrom (rx)           : ORIGIN = 0xD000,  LENGTH = 0x1000
  hirom  (rx)           : ORIGIN = 0xF000,  LENGTH = 0x1000
}
我想要的是让代码进入
lowrom
直到满,然后让代码进入
midrom
直到满,然后让剩余的代码进入
hirom

GNULD文档这么说,听起来我想做的是不可能的

有什么解决办法吗?我想避免手动选择进入哪个内存区域的内容


(或者是否有其他开源的可重定目标链接器支持此功能?

我认为没有直接的方法

我认为有一个变通办法

让我举例说明

a) 假设代码大小小于0x2000字节,那么在链接器脚本中只需添加lowrom,如下所示

记忆

{

低ROM(rx):原点=0x5000,长度=0x2000

}

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

请注意,对于midrom,只分配所需的字节数

记忆

{

低ROM(rx):原点=0x5000,长度=0x2000

midrom(rx):原点=0xD000,长度=0x0050

}

这样你就可以继续了