华大单片机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速度还是不错的。
ymf
基于倾角传感器的油罐车物联网监管系统
二维金属的发现,为新的科学开辟了道路
自家机型都适配不过来为什么魅族还要适配其他机型!
用三极管制作音乐变色彩灯电路
SMT加工产生锡珠的原因
华大HC32F460 HC32F4A0加速程序运行速度
中国实现自给自足,多晶硅厂商瓦克化学销量跌至历史新低
CQC认证如何询价?
如何选购蓝光芯片
手机行业正在酝酿着一场防水技术革新风暴
什么是光电耦合器,如何选择和使用光电耦合器?
三星W20 5G手机推出,采用柔性折叠屏的设计
TriLumina将推出940nm VCSEL照明,包罗3D LiDAR系统
光年之外正式入股一流科技,王慧文的AI创业之路更进一步!
红魔5G游戏手机入网 侧面中框仍然保留风扇
手机中ESD和EMI干扰
中功率LED提供更有成效照明解决方案
Redmibook Pro已确认配备雷电4接口
单纵模激光器的结构组成_单纵模激光器的优点及应用方法
飞行汽车离我们还有多远?