【STM32】const 变量存储学习笔记

1. const 变量的存储位置

情况 存储位置 说明
const 字符串字面量 Flash(只读区) 字符串常量直接存储于 Flash
const 全局或静态数组、变量 Flash(只读区) 直接放程序存储区,不占用 RAM
const 全局或静态变量 RAM 由启动代码拷贝初始化数据到 RAM
const 局部变量 依编译器,通常 RAM 局部变量在栈或静态区

2. const char table[3] = {1, 2, 3}; 解析

  • table 数组是只读数据 ,存储在 Flash(通常是 .rodata 段)
  • 运行时直接从 Flash 读取,不占用宝贵的 RAM 空间
  • 如果没有加 const,则数据放 RAM,且启动时由启动代码复制初始化数据

3. 变量存储示意

代码示例 变量类型 存储位置
const char table[3] = {1,2,3}; 只读全局数组 Flash (.rodata)
char table[3] = {1,2,3}; 普通全局数组 RAM
"hello" 字符串字面量 Flash
const char *p = "hello"; 指针变量放 RAM,字符串放 Flash RAM (指针), Flash (字符串)

4. 优势

  • 使用 const 关键字可以让数据直接放在 Flash,节省 RAM
  • RAM 是嵌入式系统中稀缺资源,尤其重要

5. 编译器和链接器细节

  • 编译器根据 const 属性将数据放入 .rodata
  • 链接器脚本把 .rodata 段放到 Flash 地址空间
  • 启动代码不需要复制 .rodata 数据,因为直接在 Flash 读取

6. 验证方法

  • 查看生成的 .map 文件,确认 table 地址是否属于 Flash
  • 使用 objdump 或类似工具查看 .rodata 段内容

7. 注意事项

  • const 局部变量通常不放 Flash,而是在栈或静态区
  • 不同编译器对 const 的处理细节略有不同,但大体类似
  • 在 STM32 工程中无需额外操作,使用 const 即可放心让数据放 Flash
相关推荐
知识分享小能手1 小时前
统计学学习教程,从入门到精通,参数估计 — 知识点详解与公式推导(10)
学习·机器学习·概率论
有Li1 小时前
EvoMDT:用于多癌种结构化临床决策的自进化多智能体系统文献速递/医学智能体前沿
人工智能·学习·分类·文献·医学生
殷忆枫2 小时前
AI笔记三十七:AI边缘端道桥安全监测系统:YOLOv8n推理与Web监控全解析
笔记·yolo
亿道电子Emdoor2 小时前
【Arm】解决Keil MDK无法查看外设寄存器的问题
stm32·单片机·嵌入式硬件
BW.SU3 小时前
瑞佑RUI--工业UI,拖拽即成
stm32·单片机·51单片机·gui·人机界面·单片机可视化设计
逸模3 小时前
轻加盟模式,稳住品牌统一调性的思路
笔记·建模·公装·翻模·交底
whyTeaFo3 小时前
GAMES101: Lecture 10: Geometry 1 (Introduction) ppt笔记
笔记
sulikey4 小时前
个人Linux操作系统学习笔记11 - 环境变量
linux·笔记·学习
十月的皮皮5 小时前
STM32从零到量产开发:四路继电器工业控制模块开发原理小灶 · 合集
stm32·单片机·嵌入式硬件·stm32cubemx·hal库
治愈系贝壳5 小时前
ARM --- day 6 时钟
linux·arm开发·学习