[STM32F1] 将字符串放置在闪存的固定内存地址上。

[复制链接]
 楼主| lvluoo 发表于 2025-7-31 12:51 | 显示全部楼层 |阅读模式
如何将字符串放置在闪存的固定内存地址上。

我想将一个变量放在闪存的固定地址上:

#define MYDEF "abcdefg"
const u8 MY_CHAR[] attribute((section(".ARM.__at_0x0blabla"))) = MYDEF;
这在KEIL IDE中可以工作,但我切换到了STM32CUBE IDE后就不起作用了。使用的MCU是STM32F10。

我需要如何修改这个属性?是否还需要更改链接脚本文件?

公羊子丹 发表于 2025-7-31 13:15 | 显示全部楼层
我之前也遇到类似问题,CubeIDE确实不认 __at,得配合链接脚本 .ld 文件来搞。
周半梅 发表于 2025-7-31 13:16 | 显示全部楼层
你用的STM32F10x系列,我记得Keil是靠scatter file搞定的,CubeIDE用GCC就得动手改 .ld。
帛灿灿 发表于 2025-7-31 13:17 | 显示全部楼层
想放固定地址的话可以试试这样写:__attribute__((section(".my_flash_section"))),然后在链接文件里定义 .my_flash_section 地址。
童雨竹 发表于 2025-7-31 13:18 | 显示全部楼层
你那个写法是Keil的专用语法,换了IDE后编译器变了,语法也不通用了。
万图 发表于 2025-7-31 13:18 | 显示全部楼层
链接脚本那块要小心点改,别不小心把别的段覆盖了,不然程序跑不起来。
Wordsworth 发表于 2025-7-31 13:19 | 显示全部楼层
我建议你先找到 .ld 文件,然后加一段 my_flash_section 0x0800xxxx : { KEEP(*(.my_flash_section)) }。
Bblythe 发表于 2025-7-31 13:20 | 显示全部楼层
你确定要放在 Flash 某个地址上吗?注意那段地址别被程序正常代码占用了哦。
Pulitzer 发表于 2025-7-31 13:20 | 显示全部楼层
如果只是为了升级保留参数,其实可以用 Flash 最后一页,加保护也方便。
Uriah 发表于 2025-7-31 13:21 | 显示全部楼层
有时候你还得加 __attribute__((used)),否则GCC优化器直接把你这段干掉了
Clyde011 发表于 2025-7-31 13:22 | 显示全部楼层
我试过用 CubeMX 生成的 .ld 文件改过,注意它有个 FLASH 段,别动错地方就行。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

45

主题

71

帖子

0

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

45

主题

71

帖子

0

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