【发布时间】:2014-04-05 18:44:06
【问题描述】:
我有一个程序可以生成一个大小约为 800KB 的 .axf 文件,而我的微控制器似乎可以完美地执行代码。但我想知道为什么可以将大于 800KB 的 .axf 文件存储到具有指定内部闪存为 256KB 的 Cortex-M3 微控制器中。这对我来说没有多大意义。 .axf 文件与微控制器内部闪存有关,对吧?如果是这样,为什么我的程序有效?
【问题讨论】:
标签: file flash memory cortex-m3
我有一个程序可以生成一个大小约为 800KB 的 .axf 文件,而我的微控制器似乎可以完美地执行代码。但我想知道为什么可以将大于 800KB 的 .axf 文件存储到具有指定内部闪存为 256KB 的 Cortex-M3 微控制器中。这对我来说没有多大意义。 .axf 文件与微控制器内部闪存有关,对吧?如果是这样,为什么我的程序有效?
【问题讨论】:
标签: file flash memory cortex-m3
axf、elf、coff、exe、intel hex (ihex)、motorola 的记录 (srec) 和一大堆其他“二进制”文件格式包含二进制和其他内容,例如加载代码的位置。我们很少使用程序的简单二进制图像。在使用原始二进制图像的微控制器领域仍有很多工作要做。但是越来越多的闪存程序员正在接受这些其他文件格式(intel hex 和 s record 已经被支持了很长时间)。您的工具链可能具有可以在格式 axf 到 ihex 之间转换的工具,或者感兴趣的工具是 ihex 到原始二进制文件。如果它是一个 elf 文件并且您使用的是 gnu 工具,那么
arm-none-eabi-objcopy file.axf -O binary file.bin
现在这可能会适得其反,但如果是这样,您可能没有有效的程序。例如,如果您的闪存位于 0x10000000 并且您的程序比闪存少,但您的 ram 位于 0x80000000 并且您有 N 个字节的 .data 并且链接器脚本没有考虑将其放置在闪存中(因此您的引导代码可以复制它)然后您最终可能会在 .bin 文件中添加填充以将所有内容都放在正确的位置,因此在闪存启动后,那些 N 字节的 .data 需要为 0x80000000-0x10000000 字节,因此您的 .bin 文件几乎为 2千兆字节。用于微型微控制器的大型二进制文件。另一个不使用原始二进制图像的原因,而是将二进制 blob 与关于这些二进制 blob 去向的额外信息混合的文件格式......我有 N 个字节的 .text,从 0x10000000 开始我有 Y 个字节的 .data从 0x80000000 开始等等......
【讨论】:
.axf 文件包含的信息不仅仅是闪存映像,例如有助于调试器的数据。
【讨论】: