你好!欢迎来到深圳市颖特新科技有限公司!
语言
当前位置:首页 >> HK32/航顺 >> 关于应用航顺芯片HK32F030延时效率问题

关于应用航顺芯片HK32F030延时效率问题

关键字:航顺芯片 HK32F030 延时效率问题 航顺代理 作者: 来源: 发布时间:2022-05-17  浏览:4
客户在应用程序中可能存在死等延时的处理函数(用for或者do…while)。 对比ST同样的函数HK的芯片出现延时比ST慢,是因为HK的芯片在cpu和flash之间有一个4个word大小(编号为00,04,08,0c)的指令缓存,工程编译之后,如果函数被存放到flash的地址的尾地址没有从0开始的话,(比如函数的入口地址为0x08000004,会被放到编号04的字中,而不是编号0中),就会出现执行效率低的问题。

如何避免这种问题呢?

我们在HK030/031/04A的应用笔记中有指导说明,今天在这里用一个例子详细说明修改方法:

比如用户使用uint32_tGItimer=1000000;voidDelayTimer(void){uint32_t i;for(i=0;i<GItimer;i++){  i=i;}}这样工程编译后放在flash ROM空间不同位置,尤其是超过32K后容易表现出来延时不同。为了解决这种因程序尾地址不同造成命令预取指不同而影响指令执行效率问题,把延时程序修改成如下方式可以避免上述现象。

修改如下:voidDelayTimer(void){  uint32_t i;  FLASH->ACR&= ~(0x00000010);  for(i=0;i<GItimer;i++)  {   __nop();  __nop();  __nop();  __nop();  __nop();  __nop();  __nop();  __nop();  __nop();  __nop();  __nop();  __nop();  __nop();  __nop();  __nop();  __nop();  __nop();  __nop();  __nop();  __nop();  } FLASH->ACR |= 0x00000010;  }这样修改后,就可以使调用函数延时指令执行效率与ST一样。因此用户在使用030/031/04A做开发时如果程序中存在这样死等待的延时函数,如果在时效上想与ST接近,建议采用这种方式修改。

如需要了解更多航顺MCU产品,请联系航顺核心代理商,颖特新科技,或者扫码联系我们!

  航顺代理联系方式

在之前的介绍中,我们也为大家介绍了航顺代理:HK32F103进空闲中断的解决方法,也是目前我们主推的非常成熟的解决方案!

编辑:zzy  最后修改时间:2022-05-17

联系方式

0755-82591179

传真:0755-82591176

邮箱:vicky@yingtexin.net

地址:深圳市龙华区民治街道民治大道973万众润丰创业园A栋2楼A08

Copyright © 2014-2023 颖特新科技有限公司 All Rights Reserved.  粤ICP备14043402号-4