我正在使用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中,而不是底部。
我该怎么做?
答案 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 ) ;
}