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

相关推荐
星恒讯工业路由器13 小时前
物联网僵尸网络机制与防御
信息与通信·ddos·工业物联网·工业通信·物联网安全·ddos攻击·僵尸网络
优化Henry20 小时前
5G基站开关电源故障导致小区频闪退服案例
学习·5g·信息与通信·tdd
GTfiber2 天前
深圳光特通信光纤无人机专用光模块:构建无损高清图传通道,重塑工业无人机影像传输能力
科技·5g·无人机·信息与通信
优化Henry2 天前
5G站点软件错误告警与资源激活超时两类典型告警分析与处理
网络·笔记·学习·5g·信息与通信
必须得开心呀3 天前
110MHz采集70MHz的中频信号,会产生频谱混叠吗?为什么?
信息与通信
DuHz3 天前
论文解读:用于数据分析的极值点对称模态分解方法 (Extreme-point Symmetric Mode Decomposition,ESMD)
论文阅读·算法·信息与通信·信号处理
星恒讯工业路由器3 天前
AGV集群通信架构:从单点到百台级调度的挑战与对策
网络·物联网·信息与通信·工业物联网·通信架构·agv集群·实时调度
技术硬汉3 天前
4G/5G蜂窝天线增益越大越好吗?怎么选适合自己的天线
物联网·5g·信息与通信·iot
Olivia051405144 天前
Voohu:网络变压器共模抑制比(CMRR)在高频段的退化机理与测试方法
信息与通信
QH139292318804 天前
Keysight N9917B N9918B手持式综合微波分析仪
网络·科技·嵌入式硬件·集成测试·信息与通信