Memory gcc链接器将内存块合并到一个扇区中

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 =

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

好问题。有多种方法可以做到这一点。一种方法是通过选择哪个文件的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芯片时才有用)