历史上的今天
返回首页

历史上的今天

今天是:2025年03月30日(星期日)

正在发生

2021年03月30日 | STM32的代码,跑在RAM里快?还是跑在Flash里快?

2021-03-30 来源:eefocus

测试手段如下:


主循环一直在做一个变量的自加(sum1++),当然前提保证不会溢出。


用Cortex-M3内部的Systick计数,以一秒钟为限,这个sum1的数值大小,可以判断哪种方式比较快。为了严密,我们观察第一秒到第二秒之间的计数效果;而不是从第0秒到第1秒(因为使能Systick到真正开始执行sum1++可能有间隙)。在第一次进入Systick的ISR时,记录下sum1的值;第二次进入Systick的ISR时,再次记录sum1的值,两次值之差即为一秒钟间隔中sum1执行了多少次自加。由此看出哪种方式比较快。


同样的测试前提:Prefetch Buffer Enable + Flash Latenty="2" (根据Flash Programming Manual中要求的那样,当48MHz

测试结果如下:


不对代码优化,在RAM中执行程序:sum1计数69467/秒

不对代码优化,在FLASH中执行程序:sum1计数43274/秒 (Flash里跑得慢)


/***********循环体内代码为N个以下的block*************/

(1)LDR R0,[PC, #0x154]

(2)LDR R1,[PC, #0x154]


(3)LDR R1,[R1,#0]

(4)ADDS R1, R1,#0x1


(5)STR R1,[R0, #0]


......

/****************************************************/


打开速度优化开关,在RAM中执行程序:sum1计数98993/秒

打开速度优化开关,在FLASH中执行程序:sum1计数115334/秒 (Flash里跑得快)


/***********循环体内代码为N个以下的block*************/

(1)LDR R1,[R1,#4]

(2)ADDS R1, R1,#0x1

(3)STR R1,[R0, #0]

......

/****************************************************/


结论就是:


1)程序运行在RAM里速度快还是运行在Flash里速度快,不是绝对的一概而论的,取决于代码;


2)就以上两种具体的代码情况来说,我觉得无优化时,如果在Flash里执行:(1)(2)的取指(读flash)->译码->执行 (读flash);取指和执行阶段flash的目标地址不是连续的,因此是non-sequencial access,所以会很慢;

打开优化时,(1)(2)(3)都不会造成flash的non-sequential access,所以在flash里的优势(取指和取数据走不同的总线ICode和DCode以及Prefetch)就体现出来了。


再进一步的分析,又有这样一些结论:


没有优化时,指令执行时要到Flash中取常数,结果造成指令预取队列的取指中断,取完常数后需要重新填充指令预取队列,而Flash访问需要插入等待周期,当然时间就比较长了。


经过代码优化后,指令执行时不用再到Flash中取常数,指令预取队列不会被打断,而Flash访问需要插入等待周期的效应被下面贴子中介绍的取指缓冲区抵消,所以自然速度就快了;而这个时候在RAM中执行反而慢了是因为RAM不在ICode总线上,从RAM取指需要绕一圈,当然要比在ICode总线上的Flash慢了。


关于Flash的性能,请看我的另一篇分析:【分析】STM32从Flash中运行程序的时序分析


另外,STR9与STM32的总线架构是一样的,这里有一个在STR9上实现的FFT函数的实测数据,可以进一步说明在Flash中运行代码可以比在RAM中快!


在ST的网站上有一个DSP的函数库,这是它的文档《STR91x DSP library (DSPLIB)》,在这篇文档中有一节讨论FFT运算速度的,那里给出了实际的运算时间比较,摘录如下:


Radix-4

Complex FFT Operation Mode Cycle Count Microseconds

64 Point Program in Flash & Data in SRAM 2701 28.135

64 Point Program & Data in SRAM 3432 35.75

64 Point Program & Data in Flash 3705 38.594

256 Point Program in Flash & Data in SRAM 13740 143.125

256 Point Program & Data in SRAM 18079 188.323

256 Point Program & Data in Flash 19908 207.375


推荐阅读

史海拾趣

Genisco Electronics公司的发展小趣事
考虑发电机的维护和保养难易程度以及配件的供应情况。
C&K Switches公司的发展小趣事

随着公司规模的扩大,C&K开始在全球范围内进行布局。它在中国、法国、越南、德国和印度等地设立了生产基地,这些工厂不仅提高了生产效率,还使得C&K能够更好地服务全球客户。同时,C&K的产品线也不断扩展,覆盖了消费类、工业类和汽车类等多个领域。此外,C&K还支持定制化开发,能够满足不同客户的特殊需求。这种全球布局和业务拓展使得C&K在电子行业中获得了广泛的认可和好评。

Bytes公司的发展小趣事

Bytes公司在追求经济效益的同时,也积极履行社会责任。公司注重环保和可持续发展,采用环保材料和工艺,降低产品对环境的影响。同时,公司还积极参与公益事业,捐赠资金和物资支持教育、扶贫等事业。这些举措使得Bytes公司赢得了社会的广泛认可和尊重。

请注意,这些故事框架仅供参考,您可以根据具体公司的实际情况和发展历程进行调整和补充。同时,由于我无法获取实时数据和信息,因此建议您在编写具体故事时参考相关公司的官方资料和市场分析报告。

ES Systems公司的发展小趣事

ES Systems在创立初期主要面向高端市场提供定制化服务。然而,随着市场竞争的加剧和客户需求的变化,公司意识到必须调整市场策略。于是,ES Systems开始加大在中低端市场的投入,推出了一系列性价比高的产品。这一策略的调整使得公司的市场份额迅速扩大,同时也提高了品牌知名度。

AnDAPT__Inc.公司的发展小趣事

ES Systems在创立初期主要面向高端市场提供定制化服务。然而,随着市场竞争的加剧和客户需求的变化,公司意识到必须调整市场策略。于是,ES Systems开始加大在中低端市场的投入,推出了一系列性价比高的产品。这一策略的调整使得公司的市场份额迅速扩大,同时也提高了品牌知名度。

A-BRIGHT公司的发展小趣事

A-BRIGHT公司注重与产业链上下游企业的合作与共赢。公司与多家原材料供应商建立了长期稳定的合作关系,确保了原材料的稳定供应和质量。同时,A-BRIGHT也与多家知名的电子产品制造商展开合作,共同开发新产品,实现了资源共享和互利共赢。

问答坊 | AI 解惑

手机信号突然不好,为什么呢?

最近两天小区、屋里的手机信号突然变差,信号时断是有的,以前不是这样的,很奇怪? 手机信号频率很高的,一般大锅盖不会影响吧,会是什么原因呢? 私下认为是最近的基站有问题吧,希望能尽快恢复,不然和朋友们联系多不方便:(…

查看全部问答>

几种移动版操作系统的感受

1. iPhone OS :                谁说这是手机啊,这不是PDA嘛! 2. Symbian :                   嗯,没错,这就是手机! 3. O ...…

查看全部问答>

应届生搞嵌入式很迷茫,请前辈花点时间阅读后指点一下!(不是技术问题)

我是一名即将找工作的应届生,马上要找工作了,但是很迷茫……      我的简历: 为准备电子设计大赛,自2008年3月开始自学ARM7和Cortex-M3,并基于这两个核做了一些东西,如下:  抢答器,数字闹钟,数字温度计, ...…

查看全部问答>

很奇怪的问题 ! semTake(sem, WAIT_FOREVER) 始终无法阻塞 !

do { ... semTake(sem, WAIT_FOREVER); ... } while(1); sem 是通过 semCCreate 创建的 counter 信号量。 semTake 第一次可以阻塞在 sem 上等待, 也就是 sem 第一次被 semGive 后 semTake 成功, 但是以后就无法阻塞在 sem 上 semTake 立即 ...…

查看全部问答>

128864液晶花屏的问题

小弟要用单片机做一个电子时钟,用液晶12864显示时间,做前先写了个小程序测试液晶屏,却发现一直花屏。 尝试给51复位,偶尔能显示正确结果。 液晶用串口(SID:P2.1 SCLK:P2.2),单片机加了上拉电阻的。 感觉程序没有问题,查了好久没查出来 ...…

查看全部问答>

altera lvds ipcore的使用

大家好,最近在用fpga的lvds功能,有一些疑问想问问大家。 我使用的芯片是cycloneIII的,想用lvds在板间传输数据。 看到芯片内部有ipcore可以调用,比如作为输出,将8bit的并行数据转换为1根串行数据输出,ipcore有数据对和时钟对输出。如果我连 ...…

查看全部问答>

rfid创业

我是做rfid系统集成及产品研发,想在这里看看能不能找到同行聊聊。当然,更希望能合作。我的网站:www.itrfid.com.cn 公司主要做rfid相关产品及系统集成,在这个行业混了6年了,感觉前景还是很广阔的。…

查看全部问答>

买TQ210就是用开发板的价格购买平板方案

本帖最后由 jameswangsynnex 于 2015-3-3 19:58 编辑 广州天嵌科技基于s5pv210 的tq210开发板一上市,就得到广大客户的热捧。如今,双节再优惠! 特价769元 = TQ210+ 7寸电容屏+ 运费。我们告诉您,天嵌tq210 板子好在那里。买TQ210就是用开发板的 ...…

查看全部问答>

有人做用过VTI的加速度传感器?

呵呵,有朋友用过VTI的加速度传感器没,求交流下。…

查看全部问答>

快到没有朋友!逆袭:进击的Simple Switcher !

逆袭:进击的Simple Switcher ! 视频链接:https://www.eeworld.com.cn/training/2014/TI_easypower_1208/600.html 六代传统稳压器竟然能和纳米小字及电源模块并驾齐驱?通过内部集成MOS管替代原续流二极管。 不怕神一样的对手,就怕 ...…

查看全部问答>