内核558 发表于 2025-7-20 11:39

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

在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,手动勾选范围烧录。
页: [1]
查看完整版本: 如何将程序分割到多个闪存扇区,并在中间留出一个16K的空白扇区?