349|0

1592

帖子

0

资源

纯净的硅(高级)

华大HC32F460 HC32F4A0如何加速程序运行速度? [复制链接]

华大单片机HC32F4xx系列(HC32F460 HC32F4A0)可以运行最高200Mhz,但内部Flash在 CPU运行频率达到33M后,就需要加入不同的等待周期。
 所以实际程序在内部FLash内运行时,是跟不上CPU速度,也就不能达到最高运行速度200Mhz。

 

如下图:可以看到在最高200Mhz时,读Flash中的指令需要等待5个CPU时钟周期,那大概200M运行时实际CPU能够跑到不到40Mhz。


image-20210323214703-1.png image-20210323214732-2.png

那怎么能够使程序运行的快,跑出实际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一致。

image-20210323214814-3.png 如果HCLK是200Mhz,那么使用cache后,可以加速程序运行速度到200Mhz。

image-20210323214844-4.png

(千万别认为程序每时每刻都运行在200M,所以也不要用忙等待的方式做延时函数,建议使用systick做忙等待延时函数)

图片图片

做了一个试验,测试一段代码运行时在不开启cache和开启cache的运行表现对比:
测试的这段代码:

90.png 09.png

运行结果:
 无cache时flash_run_performance_test函数使用了728023个10ns(10纳秒),
 有cache时flash_run_performance_test函数使用了259880个10ns。大家可以计算出测试函数花的时间,有cache时和无cache时速度的对比,是多少倍。

image-20210323215015-5.png image-20210323215030-6.png

总结下:就是华大HC32F4XX系列ARM cortex-M4的这颗MCU速度还是不错的。


回复
您需要登录后才可以回帖 登录 | 注册

最新文章 更多>>
    关闭
    站长推荐上一条 1/10 下一条

    About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

    站点相关: 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

    北京市海淀区知春路23号集成电路设计园量子银座1305 电话:(010)82350740 邮编:100191

    电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2021 EEWORLD.com.cn, Inc. All rights reserved
    快速回复 返回顶部 返回列表