小飞鸟f
发表于 2023-9-28 15:44
APM32F411程序在SRAM中运行速度比FLASH快?
#有奖活动# #申请原创# 1、前言APM32F411系列MCU的SRAM容量128KB、FLASH容量最高512KB。SRAM时钟频率等于APM32F411主频,FLASH时钟频率与电源电压相关,如下图所示(APM32F411用户手册3.5.1章节)。 从上图可以看出,FLASH时钟频率最大30MHz。APM32F411的最高主频可以达到120MHz,所以SRAM的最大时钟频率可以达到120MHz。在需要提高程序运行速度的工程中,有时候会考虑把全部或部分程序从FLASH中搬运到SRAM中运行。接下来,通过实例测试,感受一下APM32F411部分程序在FLASH和SRAM的运行速度。根据极海官网APM32F4xx_SDK_V1.4的GPIO_Toggle例程修改,APM32F411系统时钟设置为120MHz。2、移植部分程序到SRAM前的准备工作打开工程中的“.sct”文件,添加下图红色框的内容,“*.o(RAMCODE)”。 点击KEIL的“魔法棒”菜单,打开“Linker”界面。取消“Use Memory Layout from Target Dialog”选项。在Scatter File选项选择上一步修改的“.sct”文件。点击“OK”,完成配置。 3、程序在FLASH和SRAM中运行时间对比3.1 程序在FLASH中运行时间部分测试程序,如下图所示。主函数包括两个函数:LED2(PE6)引脚翻转函数和测试函数。测试函数主要内容是循环执行减法运算。 通过逻辑分析仪抓取PE6的电平变化情况,评估程序执行时间。在FLASH中执行该测试程序,IO翻转时间约34.37us,如下图所示。 3.2 程序在SRAM中运行时间将测试函数test_function的程序搬运到SRAM中运行,如下图所示。在test_function前后行各添加一条语句,这样,程序就在SRAM中运行了,其他程序与3.1章节一致。 在SRAM中执行测试函数程序,IO翻转时间约68.56us,如下图所示。 测试函数在FLASH中执行速度居然比在SRAM中执行速度快!这是什么原因呢?APM32F411是一款基于32位Arm Cortex-M4F内核的微控制器,带有ART加速器。根据APM32F411用户手册3.5.1.1章节描述,ART加速器的存在,提高了程序在FALSH的执行速度。 4、ART加速器原理说明ART加速器是如何加速的?为什么程序在FLASH中运行速度比SRAM的快?ARM加速器能实现指令预取队列和分支缓存,从而提高了FLASH程序执行时间。4.1 指令预取APM32F411的CPU指令总线和数据总线都是32位宽,根据哈佛结构,指令总线和数据总线可以同时进行。SRAM和FLASH不管指令还是数据都是一组总线,读指令和读数据不能同步进行。对于第3章节的例程,SRAM时钟频率等于系统时钟频率,即120MHz,FLASH时钟频率30MHz。SRAM的时钟频率是FLASH的4倍。FLASH通信总线是128位,SRAM通信总线位宽是32位,结合时钟频率和位宽,APM32F411的程序在FLASH和SRAM中运行速度基本一致。如下图所示(以系统时钟频率是FLASH时钟频率4倍为例),由于ART加速器的指令预取功能,不需要等CPU读取完数据,FLASH就可以读取下一组指令到指令预取队列,相当于FLASH读指令和读数据也可以同步进行。所以,FLASH读操作时间接近SRAM读操作时间的2倍。 4.2 分支缓存当遇到非顺序执行的代码时,跳转指令可能并不存在指令预取队列中,此时,需要重新获取指令。为了弥补指令跳转产生的时间损耗,ART加速器有指令缓存存储器,可以保存最近使用的64行128位的指令。如果跳转指令已存在指令缓存区,则无需任何延时,直接获取指令。5、结论对于APM32F411,由于ART加速器的存在,程序在FLASH运行时间比SRAM运行时间快。非特殊情况,不建议把代码放到SRAM中运行。FLASH时钟频率与系统电压有关(参考APM32F411用户手册3.5.1章节),如果系统电压低,主频高的场景,程序在FLASH和SRAM中的运行时间差不多。我们经常听说的程序在SRAM中运行时间比FLASH快,是在什么情况下会出现?对于Arm Cortex-M3内核的MCU,没有ART加速器模块,FLASH通信总线位宽只有64位的情况下,非顺序执行程序在SRAM中运行时间比在FLASH的运行时间更快。6、参考例程
hearstnorman323
发表于 2023-11-5 18:22
SRAM和FLASH存储器的读写速度和性能不同。
1988020566
发表于 2023-11-5 19:52
为了发挥处理器的全部性能,有些处理器设计了指令预取队列和分支缓存来提高FLASH的程序执行速度
alvpeg
发表于 2023-11-5 20:03
SRAM的速度比FLASH快得多,但它的存储容量相对较小。
fengm
发表于 2023-11-5 20:15
SRAM的价格比FLASH高,因此通常只在需要高速运行的程序中使用SRAM。
ingramward
发表于 2023-11-5 20:34
如果需要存储大量数据或需要长时间保存数据,FLASH可能是一个更好的选择。如果需要更高的运行速度和实时处理能力,SRAM可能是更好的选择。
jkl21
发表于 2023-11-5 20:43
由于硬件设计和算法优化等因素,FLASH也可以实现较快的运行速度。
elsaflower
发表于 2023-11-5 20:52
如果程序代码存储在SRAM中,则程序的运行速度会比存储在FLASH中快。
chenci2013
发表于 2023-11-5 21:00
单片机程序在SRAM中运行速度比FLASH快
sheflynn
发表于 2023-11-5 21:09
在单片机中,FLASH通常用于存储程序代码和数据,而SRAM则用于临时存储程序数据和变量。由于SRAM的速度更快,因此它更适合于实时处理和高速运行的应用程序。
bestwell
发表于 2023-11-5 21:18
在需要快速访问数据的程序中,使用SRAM可以提高程序的运行速度。
uytyu
发表于 2023-11-5 21:31
单片机程序在SRAM中运行速度比FLASH快的原因主要在于SRAM的访问速度比FLASH快。
febgxu
发表于 2023-11-5 21:43
一些高端的单片机,如STM32F4,其FLASH已经经过了特殊的设计和处理,使得程序在FLASH中的运行速度可以与在SRAM中相媲美。
louliana
发表于 2023-11-5 21:51
SRAM是一种易失性存储器,它的读写速度非常快,而FLASH是非易失性存储器,它的读写速度相对较慢。此外,SRAM的访问延迟也通常比FLASH小。
timfordlare
发表于 2023-11-5 22:02
因为SRAM是一种静态随机访问存储器,它的读写速度通常比FLASH更快
yorkbarney
发表于 2023-11-5 22:13
单片机程序在SRAM中运行速度比FLASH快
i1mcu
发表于 2023-11-5 22:31
单片机程序在SRAM中运行速度会比在FLASH中快。
nomomy
发表于 2023-11-6 15:53
采用了高速缓存技术,可以在一定程度上缩小SRAM和FLASH之间的差距。
louliana
发表于 2023-11-6 16:07
随着片内RAM容量不断增多,RAM资源已经不再是制约这种差别的主要因素。
jimmhu
发表于 2023-11-6 16:18
FLASH运行程序时,由于通常需要等待FLASH读取,这可能会成为性能瓶颈