【问题标题】:Cortex-M3 flash memory limitationCortex-M3 闪存限制
【发布时间】:2014-04-05 18:44:06
【问题描述】:

我有一个程序可以生成一个大小约为 800KB 的 .axf 文件,而我的微控制器似乎可以完美地执行代码。但我想知道为什么可以将大于 800KB 的 .axf 文件存储到具有指定内部闪存为 256KB 的 Cortex-M3 微控制器中。这对我来说没有多大意义。 .axf 文件与微控制器内部闪存有关,对吧?如果是这样,为什么我的程序有效?

【问题讨论】:

    标签: file flash memory cortex-m3


    【解决方案1】:

    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 开始等等......

    【讨论】:

    • 请注意,这个问题在 Stackoverflow 上已经被问过并回答了很多次......我怀疑这个问题将被关闭并作为副本删除。
    【解决方案2】:

    .axf 文件包含的信息不仅仅是闪存映像,例如有助于调试器的数据。

    【讨论】:

      猜你喜欢
      • 2014-07-10
      • 2021-05-28
      • 1970-01-01
      • 1970-01-01
      • 2014-02-11
      • 2021-09-16
      • 2014-06-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多