Memory gcc链接器将内存块合并到一个扇区中
gnu链接器是否有方法组合内存块,以便链接器在分配内存时使用一个扇区名称 例如:Memory gcc链接器将内存块合并到一个扇区中,memory,gcc,linker,block,sector,Memory,Gcc,Linker,Block,Sector,gnu链接器是否有方法组合内存块,以便链接器在分配内存时使用一个扇区名称 例如: MEMORY { RAM1 (xrw) : ORIGIN = 0x20000480, LENGTH = 0x0BB80 RAM2 (xrw) : ORIGIN = 0x2001C000, LENGTH = 0x03C00 } 在我们的扇区中是否存在包含内存块RAM1和RAM2的内存块?如下所示: .bss : { _bss_start =
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
好问题。有多种方法可以做到这一点。一种方法是通过选择哪个文件的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
}
我建议只在RAM2上放置COMMON,在RAM1上放置.bss,而不是对每个文件都这样做(只有在您有很小的RAM/ROM芯片时才有用)