软件定时器是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的使用权利。