2014-10-30 253 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

相關問題