0

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
4

1 回答 1

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

于 2013-12-19T13:13:01.893 回答