我正在使用 STM32CubeIDE 和 TouchGFX 为 STM32H750Bx MCU 进行固件开发。该固件包括一个 GUI 和一个用于外部通信的 CAN 总线。
目前固件大小约为 6 MB,其中约 5.75 MB 专用于图形(TouchGFX 图像),存储在外部 W25Q128 闪存中。
我开发了一个自定义工具来刷新新的固件更新,主要用于添加功能或修复错误。然而,该工具并未针对处理大文件进行优化,并且使用 GUI 刷新当前固件大约需要 4 小时,这是不切实际的。
在链接器文件(.ld)中,我分离了内存区域:
固件: 存储在外部闪存中,从 0x90000000 开始,大小 4 MB。
图像: 存储在外部闪存中,从 0x90400000 开始,大小 12 MB。 图像(TouchGFX 资源)很少更改,并且在更新中都是相同的。我只想刷新固件而不重新加载图像。
我的问题是,是否可以生成一个不包括 TouchGFX 图像的 .bin 文件,以便我只能刷新更新的固件?
我正在考虑将这些图像保存到特定的内存地址并从主固件访问它们,但是,我不确定如何做到这一点。除了主固件之外,是否有必要仅为图像生成 .bin?
非常欢迎任何澄清。
我认为构建的最后一步是从 ELF 运行
arm-none-eabi-objcopy
到 bin 或 hex。 这可能是在 eclipse 项目的构建后脚本中。
您需要做的就是添加选项
--remove-section=
以及与链接器脚本中的参数匹配的参数。 有关详细信息,请参阅手册页。
您可以多次运行 objcopy 来创建包含/不包含/仅包含数据部分的输出文件。