微控制器(MCU)如何运行存储在Flash的程序???

忙,太忙了!!!忙完就好了。MCU运行不也就如此?在微控制器单元(MCU)中,我们所编写的程序时通常是存储在闪存(Flash)中。当MCU启动时,它会从闪存中读取程序代码,并将其加载到RAM中执行。

相信基于以上,大家会有几个疑问:

1、既然程序在RAM中运行,那为什么要存储在Flash?为什么不存储在RAM?

2、如果存储在Flash的程序大小比RAM大小还要大,那又如何处理?

......

......

目录

1、程序为什么要存储在Flash?

2、程序为什么不存储在RAM?

3、存储在Flash的程序比RAM大时如何执行程序?

4、如果程序确实超过了RAM的限制,会发生什么?

4.1、性能下降

4.2、内存不足错误

4.3、功能限制

5、微控制器(MCU)运行存储在Flash中的程序时通常有哪些步骤?

5.1、启动和引导

5.2、程序加载

5.3、按需读取

5.4、缓存机制

5.5、分支和跳转

5.6、动态搬运

5.7、循环和重复

5.8、注意事项

6、总结


1、程序为什么要存储在Flash?

解:闪存(Flash)是一种非易失性存储介质,可以确保断电后,存储在其中的数据不会由于断电而丢失,且内存相较于RAM来说大得多,因此闪存(Flash)适合用例存储程序代码。

2、程序为什么不存储在RAM?

解:随机存取存储器(RAM)是一种易失性存储介质,在断电后存储在其中得数据就会丢失,但其读写速度相较于闪存(Flash)来说更快,适合用来数据存储和处理。所以不适合用来永久存储程序;而适合来执行程序。

3、存储在Flash的程序比RAM大时如何执行程序?

解:众所周知,Flash大小往往是RAM的几倍甚至十几倍,那么如果存储在Flash的程序比RAM本身还大时,MCU又当如何运行程序?,大家要相信,我们能想到的前人大多都考虑到了。微控制器(MCU)通常会采用分页或分段技术管理相关内存。

4、如果程序确实超过了RAM的限制,会发生什么?

4.1、性能下降

程序在Flash与RAM中频繁交换代码段;

4.2、内存不足错误

如果程序尝试访问的代码或数据不在RAM中,可能就会引发内存不足的错误;

4.3、功能限制

由于RAM空间的限制,实际代码中不得不较少程序的部分功能。

5、微控制器(MCU)运行存储在Flash中的程序时通常有哪些步骤?

5.1、启动和引导

当MCU上电或复位时,它会从预定义的地址开始执行代码,这个代码一般是引导加载程序(Bootload)的起始地址。引导加载程序负责初始化硬件、配置系统时钟,然后跳转到主程序的起始地址。其实这部分主要涉及到中断向量表的迁移,感兴趣的可以私信作者。

5.2、程序加载

程序的代码存储在Flash中,但并不需要一次性全部加载到RAM,MCU的CPU会根据程序的执行流程,通过程序计数器(PC)指示当前需要执行的指令地址。

5.3、按需读取

当CPU需要执行一个指令时,但此时指令并不在CPU的指令缓存中,那么就会从Flash中读取该指令。控制器负责将指令从Flash存储器中读取出来,并通过数据总线传递给CPU。

5.4、缓存机制

许多MCU都具有指令缓存机制,它可以减少对Flash的访问次数,以提高执行效率。如果指令已经存在于缓存中,那么CPU可以直接从缓存中读取指令,从而无需访问Flash。这里涉及多级缓存相关内容。相关内容见《缓存机制原理及其应用

5.5、分支和跳转

当程序执行到分支(函数调用或跳转指令)时,CPU会更新程序计数器(PC)以指向新地址。如果新地址不在当前缓存的代码段中,CPU可能会需要从Flash中加载新的代码段。

5.6、动态搬运

对于不支持指令缓存的简易MCU,或出现缓存MISS时,CPU会直接从Flash读取指令;对于支持代码搬运的MCU,如果需要执行的代码不在RAM中,操作系统或程序代码会负责将必要的代码段从Flash搬运到RAM中。

5.7、循环和重复

程序执行是一个循环的过程,CPU会不断重复上述步骤,直至程序执行完毕。

5.8、注意事项

以上过程对于不同的MCU可能会有所不同,其依赖于具体的硬件架构、指令集、内存管理单元(MMU)、缓存策略等因素。

6、总结

以上应该是可以帮助大家了解关于存储在Flash的程序至RAM运行的过程,当然,可能涉及其他的知识点(缓存机制、为什么要有缓存?、缓存MISS会发生什么?、多级缓存的目的是什么?又有什么优点?。。。。。。)大家不是很了解,作者会持续更新维护文章,充分将各个知识点进行相关联。这里也解释下为什么不在此文章中做发散,嵌入式领域知识体系之广泛,并不能通过寥寥万字/十几万字可以解释的,其知识体系在兼容的同时是不断更新迭代,做这一行毕生都将持续学习,所以作者只能针对单个知识点逐一讲解。

相关推荐
Hotchip华芯邦科技32 分钟前
MEMS硅麦克风应用电子烟雾化产业稳步爬升,耐高温、 防油、防酸、防腐蚀等性能优势和可实现自动化贴片及极高的一致性等特性使其必将成为主流
科技·单片机·金融·生活·社交电子·健康医疗·制造
7yewh39 分钟前
嵌入式硬件杂谈(四)-高速板PCB设计 高速信号全面讲解 蛇形线 等长线 差分对 阻抗对
驱动开发·嵌入式硬件·mcu·物联网·硬件工程·pcb工艺·精益工程
最后一个bug1 小时前
如何理解Lua 使用虚拟堆栈
linux·c语言·开发语言·嵌入式硬件·lua
YuCaiH3 小时前
【STM32】MPU6050简介
笔记·stm32·单片机·嵌入式硬件
DeepAlchemy4 小时前
ROSSERIAL与Arduino IDE交叉开发(UBUNTU环境,包含ESP32、arduino nano)
c++·单片机·ros·rosserial
BigShark88810 小时前
2025蓝桥杯(单片机)备赛--扩展外设之I2C的重要应用--PCF8591(八)
单片机·职场和发展·蓝桥杯
ID20241013220611 小时前
单电源运放
单片机·嵌入式硬件
Matlab程序猿小助手12 小时前
【MATLAB源码-第218期】基于matlab的北方苍鹰优化算法(NGO)无人机三维路径规划,输出做短路径图和适应度曲线.
开发语言·嵌入式硬件·算法·matlab·机器人·无人机
linux_carlos14 小时前
#lwIP 的 Raw API 使用指南
stm32·单片机·mcu·物联网·rtdbs
Graceful_scenery15 小时前
STM32F103系统时钟配置
stm32·单片机·嵌入式硬件