uC/os-III 时间管理

Posted lailai-laird

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 () 函数用于设置当前的时钟节拍计数值,但必须慎用该函数。

以上是关于uC/os-III 时间管理的主要内容,如果未能解决你的问题,请参考以下文章

uC/os-III 时间管理

uC/OS-III 概要

15.3-uC/OS-III时间管理(多值信号量)

19.1-uC/OS-III内存管理应用

uC/OS-III 软件定时器

ucos-III前言