打印
[新品上市]

APM32F411程序在SRAM中运行速度比FLASH快?

[复制链接]
821|41
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
#有奖活动# #申请原创#
1、前言
APM32F411系列MCUSRAM容量128KBFLASH容量最高512KBSRAM时钟频率等于APM32F411主频,FLASH时钟频率与电源电压相关,如下图所示(APM32F411用户手册3.5.1章节)。
从上图可以看出,FLASH时钟频率最大30MHzAPM32F411的最高主频可以达到120MHz,所以SRAM的最大时钟频率可以达到120MHz
在需要提高程序运行速度的工程中,有时候会考虑把全部或部分程序从FLASH中搬运到SRAM中运行。
接下来,通过实例测试,感受一下APM32F411部分程序在FLASHSRAM的运行速度。根据极海官网APM32F4xx_SDK_V1.4GPIO_Toggle例程修改,APM32F411系统时钟设置120MHz
2、移植部分程序到SRAM前的准备工作
打开工程中的.sct”文件,添加下图红色框的内容,“*.o(RAMCODE)”。
点击KEIL的“魔法棒”菜单,打开“Linker”界面。取消“Use Memory Layout from Target Dialog”选项。在Scatter File选项选择上一步修改的“.sct”文件。点击“OK”,完成配置。
3、程序在FLASHSRAM中运行时间对比
3.1 程序在FLASH中运行时间
部分测试程序,如下图所示。主函数包括两个函数:LED2PE6)引脚翻转函数和测试函数。测试函数主要内容是循环执行减法运算。
通过逻辑分析仪抓取PE6的电平变化情况,评估程序执行时间。
FLASH中执行该测试程序,IO翻转时间约34.37us,如下图所示。
3.2 程序在SRAM中运行时间
将测试函数test_function的程序搬运到SRAM中运行,如下图所示。在test_function前后行各添加一条语句,这样,程序就在SRAM中运行了,其他程序与3.1章节一致。
SRAM中执行测试函数程序,IO翻转时间约68.56us,如下图所示。
测试函数在FLASH中执行速度居然比在SRAM中执行速度快!这是什么原因呢?
APM32F411是一款基于32Arm Cortex-M4F内核的微控制器,带有ART加速器。根据APM32F411用户手册3.5.1.1章节描述,ART加速器的存在,提高了程序在FALSH的执行速度。
4ART加速器原理说明
ART加速器是如何加速的?为什么程序在FLASH中运行速度比SRAM的快?
ARM加速器能实现指令预取队列和分支缓存,从而提高了FLASH程序执行时间。
4.1 指令预取
APM32F411CPU指令总线和数据总线都是32位宽,根据哈佛结构,指令总线和数据总线可以同时进行。SRAMFLASH不管指令还是数据都是一组总线,读指令和读数据不能同步进行。
对于第3章节的例程,SRAM时钟频率等于系统时钟频率,即120MHzFLASH时钟频率30MHzSRAM的时钟频率是FLASH4倍。FLASH通信总线是128位,SRAM通信总线位宽是32位,结合时钟频率和位宽,APM32F411的程序在FLASHSRAM中运行速度基本一致。
如下图所示(以系统时钟频率是FLASH时钟频率4倍为例),由于ART加速器的指令预取功能,不需要等CPU读取完数据,FLASH就可以读取下一组指令到指令预取队列,相当于FLASH读指令和读数据也可以同步进行。所以,FLASH读操作时间接近SRAM读操作时间的2倍。
4.2 分支缓存
当遇到非顺序执行的代码时,跳转指令可能并不存在指令预取队列中,此时,需要重新获取指令。为了弥补指令跳转产生的时间损耗,ART加速器有指令缓存存储器,可以保存最近使用的64128位的指令。如果跳转指令已存在指令缓存区,则无需任何延时,直接获取指令。
5、结论
对于APM32F411,由于ART加速器的存在,程序在FLASH运行时间比SRAM运行时间快。非特殊情况,不建议把代码放到SRAM中运行。
FLASH时钟频率与系统电压有关(参考APM32F411用户手册3.5.1章节),如果系统电压低,主频高的场景,程序在FLASHSRAM中的运行时间差不多。
我们经常听说的程序在SRAM中运行时间比FLASH快,是在什么情况下会出现?对于Arm Cortex-M3内核的MCU,没有ART加速器模块,FLASH通信总线位宽只有64位的情况下,非顺序执行程序在SRAM中运行时间比在FLASH的运行时间更快。
6、参考例程
APM32F411_flash_sram_test.zip (954.88 KB)

使用特权

评论回复
沙发
hearstnorman323| | 2023-11-5 18:22 | 只看该作者
SRAM和FLASH存储器的读写速度和性能不同。

使用特权

评论回复
板凳
1988020566| | 2023-11-5 19:52 | 只看该作者
为了发挥处理器的全部性能,有些处理器设计了指令预取队列和分支缓存来提高FLASH的程序执行速度

使用特权

评论回复
地板
alvpeg| | 2023-11-5 20:03 | 只看该作者
SRAM的速度比FLASH快得多,但它的存储容量相对较小。

使用特权

评论回复
5
fengm| | 2023-11-5 20:15 | 只看该作者
SRAM的价格比FLASH高,因此通常只在需要高速运行的程序中使用SRAM。

使用特权

评论回复
6
ingramward| | 2023-11-5 20:34 | 只看该作者
如果需要存储大量数据或需要长时间保存数据,FLASH可能是一个更好的选择。如果需要更高的运行速度和实时处理能力,SRAM可能是更好的选择。

使用特权

评论回复
7
jkl21| | 2023-11-5 20:43 | 只看该作者
由于硬件设计和算法优化等因素,FLASH也可以实现较快的运行速度。

使用特权

评论回复
8
elsaflower| | 2023-11-5 20:52 | 只看该作者
如果程序代码存储在SRAM中,则程序的运行速度会比存储在FLASH中快。

使用特权

评论回复
9
chenci2013| | 2023-11-5 21:00 | 只看该作者
单片机程序在SRAM中运行速度比FLASH快

使用特权

评论回复
10
sheflynn| | 2023-11-5 21:09 | 只看该作者
在单片机中,FLASH通常用于存储程序代码和数据,而SRAM则用于临时存储程序数据和变量。由于SRAM的速度更快,因此它更适合于实时处理和高速运行的应用程序。

使用特权

评论回复
11
bestwell| | 2023-11-5 21:18 | 只看该作者
在需要快速访问数据的程序中,使用SRAM可以提高程序的运行速度。

使用特权

评论回复
12
uytyu| | 2023-11-5 21:31 | 只看该作者
单片机程序在SRAM中运行速度比FLASH快的原因主要在于SRAM的访问速度比FLASH快。

使用特权

评论回复
13
febgxu| | 2023-11-5 21:43 | 只看该作者
一些高端的单片机,如STM32F4,其FLASH已经经过了特殊的设计和处理,使得程序在FLASH中的运行速度可以与在SRAM中相媲美。

使用特权

评论回复
14
louliana| | 2023-11-5 21:51 | 只看该作者
SRAM是一种易失性存储器,它的读写速度非常快,而FLASH是非易失性存储器,它的读写速度相对较慢。此外,SRAM的访问延迟也通常比FLASH小。

使用特权

评论回复
15
timfordlare| | 2023-11-5 22:02 | 只看该作者
因为SRAM是一种静态随机访问存储器,它的读写速度通常比FLASH更快

使用特权

评论回复
16
yorkbarney| | 2023-11-5 22:13 | 只看该作者
单片机程序在SRAM中运行速度比FLASH快

使用特权

评论回复
17
i1mcu| | 2023-11-5 22:31 | 只看该作者
单片机程序在SRAM中运行速度会比在FLASH中快。

使用特权

评论回复
18
nomomy| | 2023-11-6 15:53 | 只看该作者
采用了高速缓存技术,可以在一定程度上缩小SRAM和FLASH之间的差距。

使用特权

评论回复
19
louliana| | 2023-11-6 16:07 | 只看该作者
随着片内RAM容量不断增多,RAM资源已经不再是制约这种差别的主要因素。

使用特权

评论回复
20
jimmhu| | 2023-11-6 16:18 | 只看该作者
FLASH运行程序时,由于通常需要等待FLASH读取,这可能会成为性能瓶颈

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

7

帖子

0

粉丝