MCU内存详解

MCU的内存主要有两类:

  • flash/ROM:只读、掉电数据不丢失,用于存储程序代码、常量、已初始化全局变量的初始值

  • RAM:可读写、掉电数据丢失,用于存储运行时的全局变量、局部变量、堆 / 栈等

这种地址映射是芯片厂商在设计时通过硬件电路(如内存控制器)固定的,软件无法修改。

C代码从编译到运行,需要经过三步:编译→汇编→链接,而其中链接器是"地址分配者",实际是依据链接脚本。

  • 编译→汇编:将高级语言→底层指令,同时包含中间代码生成与优化,最终生成目标架构的汇编指令,汇编器将汇编代码翻译成ELF格式的可冲定位目标文件(这个时候仅有段内偏移,未绑定最终物理地址)

  • 汇编→链接:本质是:"整合多文件、分配最终地址、修正符号引用 ",链接器处理输入的多个.o文件(及可能的库文件lib.a),最终输出 .elf/.bin

    • .text段(代码 + 只读数据)分配到FLASH区域

    • .data段(已初始化非const全局变量):RAM(可读写)

    • .bss段(未初始化的全局变量,初始值为0的全局变量,未初始化的静态变量):分配到RAM

    • .rodata段:const修饰的全局变量,存于ROM/FLASH


正是由于ELF有一个符号表(.symtab)去记录全局符号的最终物理地址,我们就可以通过objdump这个工具去找到某个全局变量的内存地址,如果是一个结构体,我们也可以先找到结构体的基地址,然后找到对应成员的偏移,就可以找到成员地址。这个实现的前提是芯片并没有虚拟内存,否则是无法实现的,下篇应该会说说MCU上电后的执行过程

https://mp.weixin.qq.com/s/3DLWcD1sqd_mwK_Pjo3jFwhttps://mp.weixin.qq.com/s/3DLWcD1sqd_mwK_Pjo3jFw

相关推荐
北京耐用通信1 天前
耐达讯自动化PROFIBUS光纤模块:工业通信的“光电翻译官”
人工智能·科技·网络协议·自动化·信息与通信
星恒讯工业路由器1 天前
4G自组网与VPDN专网技术解析
网络·物联网·信息与通信·4g自组网·vpdn专网
星恒讯工业路由器2 天前
5G‑A大上行:七大技术补短板
网络·信息与通信·6g·5g‑a·5g-a大上行
深圳市晶科鑫实业有限公司2 天前
5G与AIoT时代:如何选择晶振常用频率?
服务器·单片机·物联网·5g·智能路由器·健康医疗·信息与通信
YUANQIANG20242 天前
博弈论中势函数与势博弈构造:为什么看似 “先射箭后画靶”
算法·信息与通信
hz567892 天前
2026 年 RTC 音视频 SDK 解析:技术架构、主流厂商与选型指南
架构·云计算·音视频·webrtc·实时音视频·信息与通信
爱浦路 IPLOOK2 天前
5G UPF商用部署:从技术原理到落地价值
科技·信息与通信
SAP上海工博云署2 天前
2026年中小企业SAP服务商选型技术解析
大数据·运维·数据库·人工智能·信息可视化·运维开发·信息与通信
dxxt_yy2 天前
铁路光缆精准定位:鼎讯信通 G-6000 优势解析
信息与通信
星恒讯工业路由器2 天前
物联网网关天线:分类解析与信号质量认知误区
网络·物联网·wifi·信息与通信·wifi 天线·lora 天线·物联网关天线