uC/OS-III 软件定时器

Posted lailai-laird

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了uC/OS-III 软件定时器相关的知识,希望对你有一定的参考价值。

软件定时器是uC/OS 操作系统的一个内核对象,软件定时器是基于时钟节拍和系统管理创建的软件性定时器,理论上可以创建无限多个,操作简单,但精准度肯定比硬件定时稍逊一筹。

原理和实现过程

要用到的函数:

OSTmrCreate ()  //创建定时器

OSTmrDel ()   //删除定时器

OSTmrStart ()  //开启定时器

OSTmrStop ()  //停止定时器

 

使用定时器前先使能,软件定时器的使能位于“os_cfg.h”。

技术图片

 

 

 其有关参数的配置位于“os_cpu_app.h”。

技术图片

 

 

OSTmrCreate ()

要使用uC/OS 的软件定时器必须先声明和创建软件定时器,调用OSTmrCreate () 函数可以创建一个软件定时器。OSTmrCreate () 函数的信息如下表所示。

技术图片

 

 

 技术图片

 

 

OSTmrDel()

OSTmrDel()函数用于删除一个软件定时器。OSTmrDel () 函数的信息如下表所示。

技术图片

 

 

 技术图片

 

 

OSTmrStart()

创建完软件定时器后,如果要使用该软件定时器,需要调用OSTmrStart () 函数启动该软件定时器。OSTmrStart () 函数的信息如下表所示。

技术图片

 

OSTmrStop()

OSTmrStop()函数用于停止一个软件定时器。软件定时器被停掉之后可以调用OSTmrStart () 函数重启,但是重启之后定时器是从头计时,而不是接着上次停止的时刻继续计时。OSTmrStop () 函数的信息如下表所示。

技术图片

技术图片

 

总结:

1.要使用软件定时器,首先要声明一个OS_TMR对象,并通过OSTmrCreate()函数创建该软件定时器。软件定时器分OS_OPT_TMR_ONE_SHOT 和OS_OPT_TMR_PERIODIC 两种类型。前者相当于相当于硬件定时器的突发模式,执行的是一次性定时,定时完成之后软件定时器就停止工作,需要再次启动才能再次工作。后者相当于硬件定时器的周期模式,具有周期重载值,可以不断周期工作,不需再次启动。

2.软件定时器创建完成之后,还无法立即工作,需要调用OSTmrStart()函数来启动它投入工作。OSTmrStop()函数可以停止一个软件定时器,但它只是被停止了定时,而并没有被删除。如果还想继续使用该软件定时器定时,调用OSTmrStart()函数启动它即可,但启动后是重新定时,而不是紧接着停止时的时间继续计时。

3.OSTmrDel()函数用于删除一个软件定时器,删除之后该软件定时器不能再被使用。

软件定时和延时任务的区别:

调用OSTimeDl()或者OSTimeDlyHMSM(),意味着该任务CPU使用权会被没收,然而你开启一个定时器之后,该任务还可以使用CPU。例如:有延时任务A和普通任务B,任务A延时后就被剥夺CPU使用权了,直到任务A的延时时间到来。而在任务B中,开启了一个软件定时器,任务B还会继续执行下去,直到定时器的到来,程序去执行软件定时器调用的函数,执行完之后再回来接着执行任务B。所以总的区别就是,是否还拥有CPU的使用权利。

 

以上是关于uC/OS-III 软件定时器的主要内容,如果未能解决你的问题,请参考以下文章

uC/OS-III 软件定时器

uC/os-III 时间管理

uC/OS-III 概要

ucos-III前言

uC/OS-III 任务详解

STM32F103基于HAL库移植uC/OS-III