2

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

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

到目前为止的加载脚本是这样的:

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
}

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

我怎样才能做到这一点?

4

1 回答 1

3

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

例如

_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 ) ;
}
于 2013-10-13T18:16:44.437 回答