2014-10-30 26 views
0

在裸机项目中,我需要将ROM段的起始地址写入专用地址。什么到目前为止,我发现是这样定义的链接描述:如何将一段的起始地址写入ROM中的专用地址

MEMORY{ 
    ROM (rx) : ORIGIN = 0x00018000, LENGTH = 0x8000 
    UICR (r) : ORIGIN = 0x10001000, LENGTH = 0x400 
} 

SECTIONS { 
    .bootloader_addr 0x10001014 : 
    { 
     KEEP(*(.bootloader_addr)) 
    } > UICR 
} 

,并确定将被放置在值在0x10001014我可以在一个C++文件中添加以下地方:

std::uint32_t uicr_bootloader_start_address 
    __attribute__((section(".bootloader_addr"),used)) = 
     0x18000; 

有人有一个想法,我可以如何避免必须声明常量整数并使用链接器直接将代码段的startadress写入0x10001014

回答

1

我自己没有用过这个,但ld支持LONG(expr) command,它应该在二进制文件中插入一个4字节的文字。

+0

谢谢,这就像一个魅力。不,我必须弄清楚,如何评估ROM MEMORY的起始地址,所以我不必复制起始地址。 – 2014-10-30 09:02:42

+1

@TorstenRobitzki我认为你应该可以做到这一点,只需在'ROM'区域放一个符号'rom_start_address',然后'LONG(rom_start_address)'? – hcs 2014-10-30 09:14:59

+0

我会明天尝试,并报告是否有效。我试过类似LONG的东西(ADDR(ROM)) – 2014-10-30 19:42:15