uC/OS-III 时间管理(二)

时间管理就是一种建立在时钟节拍上,对操作系统任务的运行实现时间上管理的一种系统内核机制。

常用以下五个函数:

  OSTimeDly()

  OSTimeDlyHMSM()

  OSTimeDlyResume()

  OSTimeGet ()

  OSTimeSet ()

下面来介绍各个函数的作用。

OSTimeDly()

OSTimeDly() 函数用于停止当前任务进行的运行,延时一段时间后再运行(和定时器中断有些类似)。OSTimeDly()函数的信息如下表所示。

 

 

 

 

 

  OSTimeDly() 函数中,如果函数的实参和调用场合均合法,就会调用OS_TickListInsert()函数将当前任务插入到节拍列表进行管理,如果OS_TickListInsert() 函数将当前任务插入节拍列表成功的话,就会调用OS_RdyListRemove() 函数将当前任务从任务就绪列表中移除,并将系统切换至其他任务,等到延时的时间到来,再根据优先级决定是否将CPU使用权分配给该任务。这就是OSTimeDly() 函数实现任务延时的大致过程。

OSTimeDlyHMSM()

  OSTimeDlyHMSM() 函数与OSTimeDly() 函数的功能类似,也是用于停止当前任务进行的运行,延时一段时间后再运行,只是OSTimeDlyHMSM()函数比较于OSTimeDly()的定时格式不一样而已。但是,用户若要使用OSTimeDlyHMSM() 函数,得事先将宏OS_CFG_TIME_DLY_HMSM_EN(位于“os_cfg.h”)设为1。

 

 

 OSTimeDlyHMSM () 函数的信息如下表所示。

 

  OSTimeDlyHMSM() 函数中, 如果函数的实参和调用场合均合法, 就会调用OS_TickListInsert() 函数将当前任务插入到节拍列表进行管理。如果OSTimeDlyHMSM() 函数调用OS_TickListInsert() 函数将当前任务插入节拍列表成功的话,就会调用OS_RdyListRemove() 函数将当前任务从任务就绪列表中移除,并将系统切换至其他任务。(原理和OSTimeDly()的原理一样)

OSTimeDlyResume()

  OSTimeDlyResume () 函数用于直接结束其他任务(非当前任务)的延时。用户若要使用OSTimeDlyResume () 函数,得事先将宏OS_CFG_TIME_DLY_RESUME_EN(位于“os_cfg.h”)设为1。OSTimeDlyResume () 函数的操作对象为其他任务,不能是当前任务。

OSTimeDlyResume () 函数的信息如下表所示。

 

 

OSTimeGet ()

OSTimeGet () 函数用于获取当前的时钟节拍计数值。

 

 

 

OSTimeSet ()

OSTimeSet () 函数用于设置当前的时钟节拍计数值。(慎用,一般别用)

 

 

 总结一下:

  1.uC/OS 系统的时间事件主要有延时和等待。当任务要延时或有期限等待时,就会被插入到节拍列表里进行管理。每当时钟节拍到来时,系统就检查节拍列表中是否有任务的延时或者等待已经到期。如果有任务已经期满,则改变该任务的状态,去掉它包含的延时或等待状态,并将任务从节拍列表移除。

  2.延时的函数主要有OSTimeDly() 和OSTimeDlyHMSM()。前者以时钟节拍作为时间参数,后者直接以时分秒和毫秒作为时间参数,具有更好的交互性。其实两者的原理都一样,OSTimeDlyHMSM() 函数的时间参数最终也是要转换成节拍数的。

  3.OSTimeDlyResume () 函数可以用于结束其他任务因调用OSTimeDly() 或OSTimeDlyHMSM() 导致的延时。但必须切记,OSTimeDlyResume () 函数的操作对象为其他任务,不能是当前任务。

  4.OSTimeGet () 函数用于获取当前的时钟节拍计数值。OSTimeSet () 函数用于设置当前的时钟节拍计数值,但必须慎用该函数。

posted @ 2019-10-06 17:04  来来就来  阅读(1853)  评论(0编辑  收藏  举报