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 天前
动环监控可视化在机房管理中的创新应用与发展趋势
大数据·物联网·信息可视化·信息与通信·一体化机柜
qq_429432302 天前
叫班系统对接 IP-PBX/SIP 与排班系统:接口方式与部署选型要点
网络·网络协议·tcp/ip·信息与通信·ip·1024程序员节·voip通信协议
Yula99332 天前
从“撰写耗时”到“认知卸载”:企业邮件AI的效率边界与工程化路径
人工智能·神经网络·机器学习·数据挖掘·系统安全·信息与通信
Multipath7122 天前
多链路聚合,让具身智能高频视觉感知数据 “回得来、来得快、不中断”
网络·网络协议·5g·智能路由器·信息与通信
so~what3 天前
6G Day 1
信息与通信·通信
g3voip3 天前
工业防水电话到底怎么选?隧道、管廊与码头的需求差异
服务器·网络·信息与通信·ip
hz567893 天前
企业视频会议系统方案:总部与分支机构高效协同如何落地?
运维·服务器·网络·安全·实时音视频·信息与通信
数字新视界3 天前
信创机房动环监控的核心功能与智能运维管理实践
大数据·物联网·信息可视化·信息与通信·一体化机柜
启博网络4 天前
智慧档案库房工业组网:MR-1280 边缘大脑,实现温湿度、漏水、防火防盗设备智能联动教程
运维·网络·物联网·网络协议·网络安全·信息与通信·sdwan
terry6004 天前
企业数据查询接口防爬实战:图形验证码服务端校验接入与限流设计(附Python)
python·信息与通信·图形验证码·反爬虫·人机验证·行为验证码·滑动拼图验证