加载脚本以加载内存区域顶部的部分

时间:2013-09-30 14:12:32

标签: gcc ld linker-scripts

我正在使用ARM M0开发一个嵌入式系统项目。

必须创建一个ROM应用程序,其唯一目的是将内容存储在ROM中,并在需要时初始化数据和bss部分。

到目前为止,loadcript是这样的:

MEMORY
{
  rom (rx): ORIGIN = 0, LENGTH = 32K ; 
  ram (!rx): ORIGIN = 0x10000, LENGTH = 8K ; 
}

SECTION
{
  . = ORIGIN(rom) ;

  .text:
  {
    KEEP(*(.text)) ;
  } >.

  .data:
  {
    KEEP(*(.data)) ;
  } >ram AT>.

  .bss:
  {
    KEEP(*(.bss)) ;
  } > ram = 0x00
}

我想更改loadcript,以便将数据和bss部分加载到内存区域顶部的ram中,而不是底部。

我该怎么做?

1 个答案:

答案 0 :(得分:2)

就我目前的理解而言,这根本不可能。但是,可以定义一个大小,并使用它来计算起始地址。

e.g。

_ram_data_size = 0x1000 ;
_ram_data_address = ORIGIN(ram) + LENGTH(ram) - _ram_data_size ;
_rom_data_address = 0x100 ;

SECTION
{
  .data _ram_data_address : AT _rom_data_address
  {
    KEEP(*(.data)) ;
  }
  ASSERT( SIZEOF(.data) <= _ram_data_size ) ;
}