完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
测试手段如下:
主循环一直在做一个变量的自加(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)- gt;译码- gt;执行(读flash);取指和执行阶段flash的目标地址不是连续的,因此是non-sequencial access,所以会很慢; 打开优化时,(1)(2)(3)都不会造成flash的non-sequential access,所以在flash里的优势(取指和取数据走不同的总线ICode和DCode以及Prefetch)就体现出来了。 出处:lut1lut |
|
相关推荐
1个回答
|
|
在RAM中跑得快
|
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1777 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1621 浏览 1 评论
1080 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
728 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1678 浏览 2 评论
1938浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
731浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
570浏览 3评论
595浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
554浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-23 06:37 , Processed in 0.604014 second(s), Total 47, Slave 41 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号