防止在链接过程中删除未使用的部分

时间:2018-03-04 19:51:14

标签: gcc linker arm gnu linker-scripts

我正在使用GNU GCC链接器。我的目标是填充未使用的闪存空间,这样我将始终获得相同大小的二进制输出以进行CRC计算。在链接器脚本中,我创建了附加部分

.fill_flash :
{
    flashUsed = .;
    FILL(0xDEADC0DE);
    . = flashUsed + LENGTH(BOOTLOADER) - SIZEOF(.isr_vector) - SIZEOF(.text) - SIZEOF(.ARM.extab) - SIZEOF(.ARM) - SIZEOF(.preinit_array) - SIZEOF(.init_array) - SIZEOF(.fini_array) - SIZEOF(.data) - SIZEOF(.ccmram);
    KEEP(*(.fill_flash))
} AT >BOOTLOADER

我可以在转储文件中看到它并且它具有适当的大小,因此将其添加到使用过的Flash中会填充MCU内存的整个空间。但是,在二进制输出中没有我的部分。如何强制链接器保留并加载到BOOTLOADER区域?

1 个答案:

答案 0 :(得分:1)

解决方案很简单,需要添加额外的BYTE()命令,因此链接器的输出中将包含该部分的任何内容:

BYTE(0x00)