uCOS-II任务延时函数
编写过单片机程序的都知道,延时函数是经常被用到的。
在uCOS-II里,系统也提供了这样的延时函数。一个是大众版的OSTimeDly(),一个是精致版的OSTimeDlyHMSM()。 萝卜青菜,各有所爱,随你怎么选。
这两者的区别是,OSTimeDly()的延时时间是以节拍数来衡量的,OSTimeDlyHMSM()的延时时间则是以具体时间大小来衡量的。
这两个函数有着非常重要重要的作用,就是当你调用这两个函数的时候,ucos II 会进行一次任务调度。所以cpu能在各任务间进行切换,很大功劳得益于这两个函数。
调用这两个延时函数都会挂起本任务,CPU就会执行就绪表中优先级最高的任务。
有一点要注意的是任务调用OSTimeDly()后,一旦规定的时间期满或者有其它的任务通过调用OSTimeDlyResume()取消了延时,它就会马上进入就绪状态,而不是执行状态,也就是说延时结束后本任务不一定会被立刻执行。
下面看看这两个函数的具体实现。
OSTimeDly()函数实现过程如下:
其实程序就做了下面几件事
1、把本任务从任务就绪表中删除
2、把延时值保持到任务控制块中,并且通过OSTimeTick()每隔一个时钟节拍就减少一个延时节拍数
编写过单片机程序的都知道,延时函数是经常被用到的。
在uCOS-II里,系统也提供了这样的延时函数。一个是大众版的OSTimeDly(),一个是精致版的OSTimeDlyHMSM()。 萝卜青菜,各有所爱,随你怎么选。
这两者的区别是,OSTimeDly()的延时时间是以节拍数来衡量的,OSTimeDlyHMSM()的延时时间则是以具体时间大小来衡量的。
这两个函数有着非常重要重要的作用,就是当你调用这两个函数的时候,ucos II 会进行一次任务调度。所以cpu能在各任务间进行切换,很大功劳得益于这两个函数。
调用这两个延时函数都会挂起本任务,CPU就会执行就绪表中优先级最高的任务。
有一点要注意的是任务调用OSTimeDly()后,一旦规定的时间期满或者有其它的任务通过调用OSTimeDlyResume()取消了延时,它就会马上进入就绪状态,而不是执行状态,也就是说延时结束后本任务不一定会被立刻执行。
下面看看这两个函数的具体实现。
OSTimeDly()函数实现过程如下:
其实程序就做了下面几件事
1、把本任务从任务就绪表中删除
2、把延时值保持到任务控制块中,并且通过OSTimeTick()每隔一个时钟节拍就减少一个延时节拍数
3、调用任务调度函数,切换任务。