来源于小伙伴提问。 以下是我的一些看法。 MCU中的程序通常可以直接在FLASH中运行,但在对性能有特殊需求或需要动态修改代码的情况下,可以将程序搬到RAM中执行。 同时,片内与片外存储器在速度和访问延迟上确实存在明显差异,这会影响系统的设计决策。 1 程序从FLASH执行还是搬到RAM执行? 一般情况下,嵌入式系统的程序代码是存储在片内的FLASH中的。 在MCU上电复位后,系统的启动过程大致如下:
2 FLASH中的代码是如何运行的? 当程序计数器(PC)指向FLASH中某个地址时,处理器会从该地址读取指令,解码后执行。也就是说,程序实际上可以直接从FLASH中运行,不一定需要搬到RAM。 对于绝大多数嵌入式应用来说,这是最常见的做法,因为这样可以节省宝贵的RAM空间。 在大多数ARM或PowerPC架构的MCU中,启动流程是:
3 必须搬到RAM中才能运行吗?不这样做有什么不妥? 虽然代码可以直接从FLASH中执行,但有时搬到RAM中运行更具优势,主要有以下几种原因:
4 片内和片外存储的区别 片内RAM/FLASH:通常片内存储器的访问速度更快,延迟更低,因为它们直接与处理器内核集成在一起。片内RAM通常用于高速缓存或需要高频访问的数据,而片内FLASH用于存储稳定的程序代码。 片外RAM/FLASH:片外存储器通过外部总线连接,访问速度和片内相比会稍慢,尤其在使用串行总线(如SPI FLASH)时延迟更大。如果程序和数据需要频繁访问片外存储器,性能会明显下降。 因此,一般情况下,片外存储更多是作为数据存储或者大容量扩展,而不是执行的主要位置。 5 如果程序大小超过RAM怎么办? 在程序代码超过RAM可用空间时,通常不会整个搬移,而是采用分段加载或“XIP”(Execute In Place,原地执行)技术:
6 片外FLASH和SRAM的速度差异 片外FLASH和SRAM相对片内存储器,访问速度会更慢。 主要原因包括:
|
|