回答

收藏

【SIGMA开发小组】利用32定时器实现的一种无等待周期延时

#竞赛 #竞赛 2758 人阅读 | 0 人回复 | 2013-08-22

目前单片机中的延时分为软件延时和硬件延时,软件延时谁白了就是让CPU傻等,一直做--操作,直接影响到CPU性能的发挥;硬件延时的话,是通过内部定时器实现一个单位时间片,设置延时时间片time_1us,打开中断,没进入中断就time_1us ++;然后在主函数中判断time_1us的大小,就可以知道具体的时间,这样CPU不用太多干预,只要中断里面处理一下就好,但是还是稍显复杂,要打开中断去更新时间标志的大小,有没有一种不需要中断(软件延时优点),同时也不需要太多CPU干预,让CPU傻等(硬件延时的优点)的一种双优方案呢?答案是肯定的。请看下面代码:
定义区:
#define TIME_EXECUTE_PERIODICALLY_BEGIN(time_ms) \
{\
    static uint32_t target = 0;\
    if(target <= time_nowMs())\
    {\
        target = time_nowMs() + time_ms;
#define TIME_EXECUTE_PERIODICALLY_END() \
    }\
}
调用区:
TIME_EXECUTE_PERIODICALLY_BEGIN(1)       
    {
        ;//要执行的代码,此代码会实现1ms定期执行一次,很强大吧
    }TIME_EXECUTE_PERIODICALLY_END()

分享各位网友,望共同探讨四轴!!!
分享到:
回复

使用道具 举报

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

本版积分规则

关闭

站长推荐上一条 /3 下一条