实战经验 | 使用STM32CubeIDE填充未用FLASH区域
本帖最后由 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。有需要的客户可以参考文中的具体实现方法。
点击按钮下载《使用STM32CubeIDE填充未用FLASH区域》原文档。点击下载
阅读原文
查看更多
为啥要填充未用FLASH呢 同问 GNU GCC arm 工具链进行编译,链接 在STM32CubeIDE中,填充未用FLASH区域的方法主要涉及到对链接文件(.ld或.icf)的修改
如果某些敏感信息存储在FLASH中,那么通过填充未用区域可以增加**者获取这些信息的难度
在FLASH区段定义之后,添加一个新的区段来填充未用的FLASH区域。这个新区段的大小应该等于你希望填充的区域大小,内容可以设置为0xFF或其他你想要的值
在某些情况下,如果未使用的FLASH区域没有被适当地填充,那么在后续写入操作时可能会意外地覆盖这些区域中的数据
当需要对FLASH进行调试或维护时,知道哪些区域是未被使用的可以帮助开发人员更快地定位问题和进行必要的修改
在链接脚本文件中,查看对FLASH和RAM的定义部分,了解当前程序在内存中的分布情况 在STM32CubeIDE中填充未用FLASH区域,可以通过修改链接脚本文件(.ld或.sct文件)来实现
如果您的项目使用的是STM32CubeMX生成的模板代码,那么可以在项目的“LinkerScript”文件夹中找到对应的.ld文件。如果没有该文件夹,则需要手动创建,并将链接脚本文件放入其中。
在.sct文件中,我们需要使用END_OF_BLOCK命令来指定填充区域
保存对链接脚本文件的修改后,重新编译项目。编译器会根据新的链接脚本文件将未用的FLASH区域填充为指定的值。
填充区域的内容除了可以设置为0xFF,还有其他可选内容吗
页:
[1]