[STM32F4] 如何将程序分割到多个闪存扇区,并在中间留出一个16K的空白扇区?

[复制链接]
 楼主| 内核558 发表于 2025-7-20 11:39 | 显示全部楼层 |阅读模式
在STM32F446中,为了充分利用闪存空间,希望将其中一个16K扇区用于可读写的校准数据。
我原以为这只需在链接脚本中设置,但编程工具希望将所有内容放入一个连续的闪存空间。
搜索这一概念时,我只看到了单个闪存定义的示例。
我以前用IAR做过类似的事情。

公羊子丹 发表于 2025-7-22 07:28 | 显示全部楼层
F4 的闪存分扇区确实得靠链接脚本来分段定义,关键是分段得对齐。
周半梅 发表于 2025-7-22 07:29 | 显示全部楼层
CubeIDE 里默认的 .ld 脚本是连续区,你要自己加个新的 section 给校准区留空间。
帛灿灿 发表于 2025-7-22 07:30 | 显示全部楼层
我以前也这么搞过,一般就把校准区单独放最后或者放第一个 16K 扇区。
童雨竹 发表于 2025-7-22 07:31 | 显示全部楼层
如果编程工具要求连续,你可以生成两个 bin,先烧程序再单独烧校准区。
万图 发表于 2025-7-22 07:32 | 显示全部楼层
也可以在代码里留个自定义的段,比如 attribute((section(".calib"))) 来隔离。
Wordsworth 发表于 2025-7-22 07:33 | 显示全部楼层
用 IAR 的话是用 Linker Placement 文件,CubeIDE 也能类似操作,就是写 .ld 文件。
Bblythe 发表于 2025-7-22 07:34 | 显示全部楼层
有些人干脆把可读写数据放到最后两个扇区,避免和程序共用中间区域。
Pulitzer 发表于 2025-7-22 07:35 | 显示全部楼层
记得擦除的时候要小心,别把程序擦掉了,单个扇区擦除很重要。
Uriah 发表于 2025-7-22 07:36 | 显示全部楼层
如果是 FreeRTOS,写校准数据最好锁调度或者关中断,防止出错。
Clyde011 发表于 2025-7-22 07:37 | 显示全部楼层
ST-LINK Utility 支持选择扇区烧录,可以先生成 hex,手动勾选范围烧录。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

37

主题

37

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部