我为某些ARM处理器编译了代码并拥有二进制文件。现在我想知道它在FLASh内存中占用的确切字节大小(地址范围)。
因为,我在闪存的最后1kB有一定的恢复机制,并且不希望它被覆盖,因为它需要永久存在。
二进制文件的readelf为我提供了起始地址(映射到代码和数据段)&我无法将其映射到我想要的地方。
答案 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