你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

实战经验 | STM32CubeIDE实用技巧之如何指定变量、函数、文件到指定内存

[复制链接]
攻城狮Melo 发布时间:2026-5-26 15:22

0 1

概述

在实际项目中,经常有这样的需求,希望把变量、函数,甚至是文件,存放到指定的内存上,那么在STM32CubeIDE中应该如何实现呢?

0 2

示例

刚好手中有一块NUCLEO-G474RE的开发板,STM32G474拥有128K Bytes的RAM,512K Bytes的Flash。

在STM32CubeIDE中,由链接文件linker file(*.ld)来决定内存的分布,也就是工程师们常说的内存分散加载文件。

2.1. 指定变量地址

目标:自定义变量运行时位于0x20010000开始的64KB的RAM内存中,编译后的数据初始值存储在0x08010000开始的448KB的FLASH内存中。

为了实现这一目标,我们要先在链接文件中,划分出这片RAM内存(如取名为MY_RAM)和FLASH内存(如取名为MY_FLASH,红色为增加的内容):

image.png

MY_RAM:起始地址0x20010000;大小:64K;权限:x(可执行)、r(可读)、w(可写),即作为可读写的内存使用。

MY_FLASH:起始地址0x08010000;大小:448K;权限:r(可读)、x(可执行),不可写(FLASH特性),用于存储程序代码。

然后进行段的分配(黄色为增加的内容):

image.png

image.png

注意:链接文件的Section定义中,”.my_code_section”需要放在“.text”之前。

因RAM的特性,上电之后其内容是随机值,所以在使用RAM之前强烈推荐先初始化为默认值(如0x00)。

下面代码就是初始化MY_RAM的示例(黄色为增加的内容): image.png

如此一来,我们就完成了内存的布局,接下来,只要在做应用层的申明/定义时,带上内存的属性就可以了。

/* Private variables ---------------------------------------------------------*/COM_InitTypeDef BspCOMInit __attribute__((section(".mydata.my_variables")));

如上述示例的“BspCOMInit”结构体变量,通过

attribute((section(".mydata.my_variables")))”修饰,就会存放在MY_RAM内存域。

编译之后,可通过map文件来验证结果:

image.png

▲ 图1. 指定变量位置

2.2. 指定函数地址

在文件中,通过attribute属性来修饰函数,对于多个函数,申明的顺序就是函数存放在memory中的顺序:

void My_Func_1(void) __attribute__((section(".my_section.My_Func_1")));void My_Func_3(void) __attribute__((section(".my_section.My_Func_3")));void My_Func_2(void) __attribute__((section(".my_section.My_Func_2")));

2.3. 指定文件地址

将“main.c”和“sysmem.c”两个文件指定存放在“MY_FLASH(0x08010000)”内存域中,可这样来实现:“./Application/User/Core/main.o(.text .text)”,“./Application/User/Core/ sysmem.o(.text .text)”。

完整参考如下所示(黄色粗体部分):

image.png

注意这里的文件路径是STM32CubeIDE中的项目路径,不是电脑中文件夹的路径。

image.png

▲ 图2. 本示例中的文件

编译之后,查看map文件可验证结果,能看到函数的地址和顺序,以及文件的地址都是在0x08010000之后了:

image.png

▲ 图3. 指定函数/文件的内存

0 3

小结

本文实验完整的实验工程(点击下载)供大家直接使用,希望对大家有所帮助。

经验分享 | LAT1616 STM32CubeIDE实用技巧之如何指定变量_函数_文件到指定内存上

收藏 评论0 发布时间:2026-5-26 15:22

举报

0个回答

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版