本帖最后由 STM新闻官 于 2024-2-28 14:25 编辑
一、引言
在 IAR 中有一个功能可以设置“将未用到 FLASH 区域填充成设定的数值(如 0xFF) 及是否计算 checksum”。STM32CubeIDE 中没有该功能的 GUI 实现,但可以通过修改 Link File 实现,本文就修改方法进行介绍。
二、STM32CubeIDE 未用 Flash 区域的填充
2.1. STM32CubeIDE GCC 工具链介绍 STM32CubeIDE 使用 GNU GCC arm 工具链进行编译,链接。具体来讲就是使用 arm -none-eabi-gcc 进行代码编译;使用 arm-none-eabi-gcc 进行链接(因为 arm-none-eabi-ld 对c/c++文件混合型生成的.o 文件支持性较差);使用 arm-none-eabi-objcopy 生成 hex, bin 文件;使用 arm-none-eabi-objdump 生成编译链接过程的信息文件等。如下面的STM32CubeIDE build 日志输出。填充 Flash 区域就是用到了 GNU GCC linker 的功能。
2.2. 用 0xFF 填充 Flash 未用区域 在 STM32CubeIDE 中,为了实现填充 Flash 未用区域,可以修改 Link 文件。具体做法是在 ld 文件中,在 Sections 中最后一个要放入 FLASH (> FLASH)的 section 之后,添加一个附加 section(如下例中 padding), 该 section 大小为剩余 FLASH 大小,内容为 0xFF。再将该 section 使用“> FLASH”放入 FLASH 即可。下面以 STM32H747 工程中的一个 Link File 示例: 2.3. 代码区的 checksum如果需要计算代码区的 checksum,上例中的 padding section,则不要全部填充,可剩余1 到几个字节。如使用 16 位 checksum,则将 Number_bytes_checksum 设置为 2。
待完成 checksum 计算后,将 checksum 数值写入 bin 文件的最后几个字节即可生成完整的烧录 bin 文件。
三、 小结
本文介绍了在 STM32CubeIDE 中,利用 Link 文件实现 Flash 未用区域填充 0xFF(或其他数值)的方法,核心是增加填充了的 section。有需要的客户可以参考文中的具体实现方法。
|