二进制大小片上

时间:2015-01-16 08:11:04

标签: memory binary size flash-memory

我为某些ARM处理器编译了代码并拥有二进制文件。现在我想知道它在FLASh内存中占用的确切字节大小(地址范围)。

因为,我在闪存的最后1kB有一定的恢复机制,并且不希望它被覆盖,因为它需要永久存在。

二进制文件的readelf为我提供了起始地址(映射到代码和数据段)&我无法将其映射到我想要的地方。

2 个答案:

答案 0 :(得分:0)

使用值'ab'预初始化闪存,加载二进制。读取闪存,直到遇到超过2个“ab”值。这应该给出二进制占用的闪存中的地址范围。 (这是假设你的二进制文件可能没有超过2'ab'作为二进制文件的一部分)

答案 1 :(得分:0)

如果您的编译器/链接器基于gnu工具链(gcc / ld)

1 /编译时

在链接描述文件中,调整节大小以减去1K。 如果您的代码不适合您的闪存区域,则编译器会抛出错误。

示例:

MEMORY
{
FLASH (rx)      : ORIGIN = 0x08001000, LENGTH = 128K-1K
RAM (xrw)       : ORIGIN = 0x20000000, LENGTH = 16K
}

2 /在运行时

您可以在链接描述文件中设置一个符号,以确定程序的结尾(文本段)。您可以使用此符号进行运行时测试

示例:

.text :
{
    . = ALIGN(4);
    _etext = .;        /* define a global symbols at end of code */
} >FLASH

3 /手动

编译完成后,使用objcopy转换您的elf文件以获取进入Flash的二进制图像。检查数据表以获取闪存大小,并手动检查文件大小是否适合闪存减去1K。

例如:

objcopy -O binary myfile.elf myfile.bin