【SIGMA开发小组】利用32定时器实现的一种无等待周期延时
#竞赛
2758 人阅读
|
0 人回复
|
2013-08-22
TA的每日心情 | 奋斗 2013-10-28 09:28 |
|---|
签到天数: 34 天 连续签到: 1 天 [LV.5]常住居民I
进士
- 积分
- 1108
|
目前单片机中的延时分为软件延时和硬件延时,软件延时谁白了就是让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()
分享各位网友,望共同探讨四轴!!!
|
|
|
|
|
|
|
|
|