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

跑在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管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版