Memory 片上二进制大小

Memory 片上二进制大小,memory,binary,size,flash-memory,Memory,Binary,Size,Flash Memory,我为某个ARM处理器编译了代码,并使用了二进制代码。现在我想知道它在我的闪存上所占的确切字节大小(地址范围) 因为,我在闪存的最后1kB有一定的恢复机制,不希望被覆盖,因为它需要永久存在 binary的readelf为我提供了起始地址(映射到代码和数据段)&我无法真正将其映射到我想要的 使用值'ab'预初始化闪存,加载二进制文件。读取闪存,直到遇到2个以上的“ab”值。这应该给出二进制占用的闪存中的地址范围。(假设二进制文件中的“ab”不超过2)如果编译器/链接器基于gnu工具链(gcc/ld)

我为某个ARM处理器编译了代码,并使用了二进制代码。现在我想知道它在我的闪存上所占的确切字节大小(地址范围)

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


binary的readelf为我提供了起始地址(映射到代码和数据段)&我无法真正将其映射到我想要的

使用值'ab'预初始化闪存,加载二进制文件。读取闪存,直到遇到2个以上的“ab”值。这应该给出二进制占用的闪存中的地址范围。(假设二进制文件中的“ab”不超过2)

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

1/编译时

在链接器脚本中,将节大小调整为减1K。 如果代码不适合flash区域,编译器将抛出错误

例如:

MEMORY
{
FLASH (rx)      : ORIGIN = 0x08001000, LENGTH = 128K-1K
RAM (xrw)       : ORIGIN = 0x20000000, LENGTH = 16K
}
.text :
{
    . = ALIGN(4);
    _etext = .;        /* define a global symbols at end of code */
} >FLASH
2/在运行时

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

例如:

MEMORY
{
FLASH (rx)      : ORIGIN = 0x08001000, LENGTH = 128K-1K
RAM (xrw)       : ORIGIN = 0x20000000, LENGTH = 16K
}
.text :
{
    . = ALIGN(4);
    _etext = .;        /* define a global symbols at end of code */
} >FLASH
3/手动

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

例如:

objcopy -O binary myfile.elf myfile.bin