完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
华大单片机HC32F4xx系类(HC32F460 HC32F4A0)可以运行最高200Mhz,但内部Flash在 CPU运行频率达到33M后,就需要加入不同的等待周期。
所以实际程序在内部FLash内运行时,是跟不上CPU速度,也就不能达到最高运行速度200Mhz。 如下图:可以看到在最高200Mhz时,读Flash中的指令需要等待5个CPU时钟周期,那大概200M运行时实际CPU能够跑到不到40Mhz。 那怎么能够使程序运行的快,跑出实际CPU的频率呢? 两种方法: 1.理所应当想到的第一种方法就是把关键程序或需要运行速度的代码搬到SRAM内运行。 这个方法不在本贴讨论范围内,不过原理和细节都不太复杂。 这里提醒以下两点,具体做法也不难,不管是谁家的MCU这种SRAM内运行的方法都是一样的。 1)只需要注意中断向量表要重映射到SRAM中,如果想把中断搬运到SRAM中运行的话。 2)还有一点是,搬运到SRAM内运行的代码如果有调用Flash内代码的,也是会影响速度。需要再把调用链上所有代码一同搬运到SRAM内。 2.就是在华大HC32Fxx系列MCU内,有一个1K大小的FLash Cache,可以使运行FLash内的代码加速,或读取Flash内数据加速。 使运行在Flash内的代码执行速度和CPU速度同频。当然,既然是读的cache,那么如果CPU没有命中cache中的内容,还是会从Flash中取数据和指令的。 所以在整个程序运行期间 cache起到了加速作用,而不能认为每个运行时段程序运行的速度都会和CPU一致。 如果HCLK是200Mhz,那么使能cache后,可以加速程序运行速度到200Mhz。 (千万别认为程序每时每刻都运行在200M,所以也不要用忙等待的方式做延时函数,建议使用systick做忙等待延时函数) 我做了一个试验,测试一段代码运行时在不开启cache和开启cache的运行表现: 测试的这段代码: 运行结果: 无cache时flash_run_performance_test函数使用了728023个10ns(10纳秒), 有cache时flash_run_performance_test函数使用了259880个10ns。 大家可以计算出测试函数花的时间,有cache时和无cache时速度的对比,是多少倍。 总结下:就是华大HC32F4XX系列ARM cortex-M4的这颗MCU速度还是不错的。 |
|
|
|
只有小组成员才能发言,加入小组>>
3275 浏览 9 评论
2950 浏览 16 评论
3454 浏览 1 评论
8982 浏览 16 评论
4043 浏览 18 评论
1092浏览 3评论
564浏览 2评论
const uint16_t Tab[10]={0}; const uint16_t *p; p = Tab;//报错是怎么回事?
561浏览 2评论
用NUC131单片机UART3作为打印口,但printf没有输出东西是什么原因?
2297浏览 2评论
NUC980DK61YC启动随机性出现Err-DDR是为什么?
1854浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-19 09:41 , Processed in 1.005746 second(s), Total 51, Slave 41 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号