gcc链接器将内存块组合成一个扇区

时间:2013-12-13 14:37:37

标签: memory gcc linker block sector

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

1 个答案:

答案 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上。