HK32MCU应用笔记(五)| 关于应用HK32F030延时效率问题

cathy的头像
cathy 发布于:周二, 09/14/2021 - 09:20 ,关键词:

用户在应用程序中可能存在死等延时的处理函数(用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接近,建议采用这种方式修改。

相关阅读:
HK32MCU应用笔记(一)| HK32F030X系列在PH测量笔的应用
HK32MCU应用笔记(二)| 国外品牌采用航顺HK32F030R8T6代替出现串口不兼容解决方法
HK32MCU应用笔记(三)| 航顺芯片在5G光纤测试仪的应用
HK32MCU应用笔记(四)| 关于老版本HK32F103串口USART偶尔出现数据错误

来源:航顺芯片
免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。

围观 125