硬件学习笔记--65 MCU的RAM及FLash简介

MCU(微控制器单元)内部的 RAMFlash 是最关键的两种存储器,它们直接影响MCU的性能、功耗和编程方式。以下是它们的详细讲解及作用:

1. RAM(随机存取存储器)

1.1 特性

1)易失性:断电后数据丢失。

2)高速读写:比Flash快得多(纳秒级访问)。

3)随机访问:可直接读写任意地址。

4)通常容量较小:从几KB到几MB(取决于MCU型号)。

1.2 类型

1)SRAM(静态RAM)

无需刷新电路,速度快,但成本高,占用面积大。主要用于高速缓存或小容量RAM(如STM32的CCM RAM)。

2)DRAM(动态RAM)

需要定期刷新,集成度高,成本低,但MCU通常不内置(多见于外部扩展RAM)。

1.3 作用

**1)存储运行时变量:**全局变量、局部变量、数组、结构体等。

**2)堆栈(Stack):**存储函数调用时的返回地址、局部变量、寄存器状态等。如果堆栈溢出(Stack Overflow),程序会崩溃。

3)堆(Heap): 动态内存分配(如malloc()),但嵌入式系统通常避免使用(容易导致内存碎片)。

**4)数据缓冲区:**如串口接收缓存、DMA传输数据存放区等。

1.4 典型应用

  • 在STM32F103中,RAM可能是 20KB ,用于存储:全局变量(.data 段);未初始化的变量(.bss 段);堆栈(由启动文件配置大小)

2. Flash(闪存)

2.1 特性

1)非易失性:断电后数据不丢失。

2)可擦写 :支持多次编程(寿命约 1万~10万次)。

3)较慢的写入速度:擦除和写入需要较长时间(微秒~毫秒级)。

4)容量较大:从几十KB到几MB(取决于MCU型号)。

2.1 类型

1)Nor Flash :支持 XIP(eXecute In Place),CPU可直接从Flash执行代码,无需全部加载到RAM。主要用于存储程序代码(如STM32的Flash)。

**2)Nand Flash:**容量大、成本低,但需要坏块管理,一般用于外部存储(如eMMC、SD卡)。

2.2 作用

1)存储程序代码(.text段): 编译后的固件(.bin / .hex 文件)烧录到Flash。

2)存储常量数据(.rodata段):const变量、字符串常量、查找表等。

**3)存储非易失性数据:**如系统配置、校准参数、日志等(需注意擦写寿命)。

2.3 典型应用

在STM32F103中,Flash可能是 64KB~512KB ,用于存储:程序代码(.text);只读数据(.rodata);初始化数据(.data 在启动时从Flash加载到RAM)。

3. RAM vs Flash 对比汇总

特性 RAM Flash
易失性 断电数据丢失 断电数据保留
读写速度 极快(ns级) 较慢(µs~ms级写入)
寿命 无限次读写 约1万~10万次擦写
用途 运行时变量、堆栈 程序代码、常量数据
典型容量 几KB~几MB 几十KB~几MB

4. 常见问题 & 注意事项

4.1 RAM不足怎么办?

1) 优化数据结构(如用uint8_t代替int)。

**2)**减少全局变量,多用局部变量(栈内存)。

3) 避免动态内存分配(malloc),防止内存碎片。

4.2 Flash寿命如何管理?

**1)**减少频繁写入(如日志采用循环缓冲区)。

2) 关键数据存储到 EEPROMFRAM(如STM32的Option Bytes)。

4.3 代码如何执行?

**1)XIP(就地执行):**大多数ARM MCU直接从Flash运行代码,节省RAM。

**2)部分加载到RAM:**对性能关键代码(如中断服务程序)可复制到RAM执行。

5. 总结

1)RAM :存储运行时数据,速度快但容量小,需合理管理。

2)Flash :存储程序代码和常量,非易失但写入慢,需注意擦写次数。

3)协作方式

上电后,CPU从Flash读取代码执行。变量和堆栈在RAM中动态分配。常量数据(如const)存放在Flash,运行时无需加载到RAM。

相关推荐
翻滚吧键盘16 分钟前
vue绑定一个返回对象的计算属性
前端·javascript·vue.js
苦夏木禾20 分钟前
js请求避免缓存的三种方式
开发语言·javascript·缓存
超级土豆粉29 分钟前
Turndown.js: 优雅地将 HTML 转换为 Markdown
开发语言·javascript·html
秃了也弱了。35 分钟前
Chrome谷歌浏览器插件ModHeader,修改请求头,开发神器
前端·chrome
乆夨(jiuze)1 小时前
记录H5内嵌到flutter App的一个问题,引发后面使用fastClick,引发后面input输入框单击无效问题。。。
前端·javascript·vue.js
忧郁的蛋~1 小时前
HTML表格导出为Excel文件的实现方案
前端·html·excel
小彭努力中1 小时前
141.在 Vue 3 中使用 OpenLayers Link 交互:把地图中心点 / 缩放级别 / 旋转角度实时写进 URL,并同步解析显示
前端·javascript·vue.js·交互
wei_shuo2 小时前
飞算 JavaAI 开发助手:深度学习驱动下的 Java 全链路智能开发新范式
java·开发语言·飞算javaai
熊猫钓鱼>_>2 小时前
用Python解锁图像处理之力:从基础到智能应用的深度探索
开发语言·图像处理·python
然我2 小时前
别再只用 base64!HTML5 的 Blob 才是二进制处理的王者,面试常考
前端·面试·html