gnu链接器是否有办法组合内存块,以便链接器在分配内存时使用一个扇区名称?
例如:
MEMORY
{
RAM1 (xrw) : ORIGIN = 0x20000480, LENGTH = 0x0BB80
RAM2 (xrw) : ORIGIN = 0x2001C000, LENGTH = 0x03C00
}
我们的扇区是否有内存块,包括内存块RAM1和RAM2?如下所示:
.bss :
{
_bss_start = .;
*(.bss)
*(.bss.*)
*(COMMON)
_bss_end = .;
} >RAM >RAM1
答案 0 :(得分:0)
好问题。有多种方法可以做到这一点。一种方法是通过选择哪个文件的BSS去哪里来实际分割BSS部分。
MEMORY
{
RAM1 (xrw) : ORIGIN = 0x20000480, LENGTH = 0x0BB80
RAM2 (xrw) : ORIGIN = 0x2001C000, LENGTH = 0x03C00
}
SECTIONS
{
.bss1:
{
f1.o
. =+ 0x200;
f2.o (.bss)
} >RAM1
.bss2:
{
f3.o (.bss)
f4.o (.bss) = 0x1234
} >RAM2
}
不是为每个文件执行此操作(仅在有小型RAM / ROM芯片时才有用),我建议将例如COMMON放在RAM2上,将.bss放在RAM1上。