如何将段的起始地址写入ROM中的专用位置

时间:2014-10-30 08:19:25

标签: ld bare-metal

在裸机项目中,我需要将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 个答案:

答案 0 :(得分:1)

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