你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

跑在ram里快?还是跑在flash里快?

[复制链接]
incompletely 提问时间:2008-9-3 18:02 /
测试手段如下:
主循环一直在做一个变量的自加(sum1++),当然前提保证不会溢出。
用Cortex-M3内部的systick计数,计一秒之类,这个sum1加到多少了,以此来看谁跑的快。为了严密,看从第一秒到第二秒之间的计数效果;而不是从第0秒到第1秒(因为使能systick到真正开始执行sum1++可能有间隙)。SYStick的ISR中,第一次进入时,记录sum1的值;第二次进入时,再次记录sum1的值,两次值之差即为一秒之类sum1执行了多少次自加。由此看出谁跑得快。
同样的测试前提:
Prefetch Buffer Enable + Flash Latenty=2 (根据Flash Programming Manual中要求的那样,当48MHz
测试结果如下:
不对代码优化@ RAM :计数69467
不对代码优化@ FLASH :计数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 :计数98993
打开速度优化开关@ FLSASH :计数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)就体现出来了。

出处:lut1lut
收藏 评论1 发布时间:2008-9-3 18:02

举报

1个回答
alph 回答时间:2008-10-6 12:38:24

回复:跑在ram里快?还是跑在flash里快?

在RAM中跑得快

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版