UCOS-III 软件定时器

1.定时器的作用

1)通过定时器的回调执行周期性任务

2)通过定时器的回调执行延时任务

2. 定时器的使用

2.1 定时器相关API

OSTmrCreate()	       创建并初始化定时器 
OSTmrDel()	       删除定时器 
OSTmrRemainGet()       获取定时器超时前的剩余时间 
OSTmrStart()	       启动或重置定时器 
OSTmrStateGet()	       获取定时器的当前状态 
OSTmrStop()	       停止定时器

 

2.2 创建定时器

void  OSTmrCreate (OS_TMR              *p_tmr,            /* Pointer to timer     */
                   CPU_CHAR            *p_name,           /* Name of timer, ASCII */
                   OS_TICK              dly,              /* Initial delay        */
                   OS_TICK              period,           /* Repeat period        */
                   OS_OPT               opt,              /* Options              */
                   OS_TMR_CALLBACK_PTR  p_callback,       /* Fnct to call at 0    */
                   void                *p_callback_arg,   /* Arg. to callback     */
                   OS_ERR              *p_err)

2.2.1 创建一次性定时器

        opt =OS_OPT_TMR_ONE_SHOT, dly>0 

 

ebab1181767253f5517803563227fbf5.png

2.2.2 重置一次性定时器

        opt =OS_OPT_TMR_ONE_SHOT, dly>0 ,在定时器回调中重置定时器。

 

70222b4ef0dbf5446883cb2105c518a2.png

2.2.3 创建无初始延时的周期性定时器

        opt =OS_OPT_TMR_PERIODIC,dly=0, period>0 

 

f5d105735ff2ddfbf08ef7c9127bb12d.png

2.2.4 创建有初始延时的周期性定时器

        opt =OS_OPT_TMR_PERIODIC,dly>0, period>0

 

8bfa9e58988545ddb756cc7ca8b5b93a.png

2.3启动定时器

调用OSTmrStart启动定时器,如果定时器正在运行则从定时器列表中删除定时器,更新remain后再把定时器重新插入到定时器列表中。如果定时器的状态为停止状态或完成状态,则直接插入定时器列表中

 

e1ff660aeac016875af30921064c9706.png

3 定时器的实现

3.1 定时器任务的框架

 

969c06a8f862e5cc291d98ab1a3c7ac9.png

 


1)定时器任务检查定时器列表中是否有定时器
2)系统定时器列表中无定时器,则一直等待定时器添加
3)系统定时器列表中有定时器超时或有定时器增减
4)更新定时器列表中所有定时器的增量值
5)执行定时器回调,从定时器列表中删除定时器,若为周期性定时器则重新插入定时器列表

3.2 定时器数据结构

 

3d4e6fb05345e86087ce8acc9493ea26.png

 

3.3 定时器列表

 

3.3.1 空定时器列表

 

ead8750e2d95b785c13217d157383dc5.png

 

3.3.2 插入一个定时器后的定时器列表

 

a089a74b5a05d9966247d2f85f0cedc3.png

 

3.3.3 插入两个定时器后的定时器列表

 

7cf50e14d8c2f61655b651ce593086e9.png

 

4.软件 定时器总结

1) 定时器列表是一个增量列表,无需遍历整个列表,只需检查列表头部的定时器是否超时。

2) 定时器任务通过使用条件变量及互斥锁,解决了消费者等待生产者时的临界资源保护问题。 3) 定时器任务通过条件变量的阻塞超时,来唤醒定时器任务。因此定时器功能依靠系统时钟。 4) 禁止在中断服务中调用定时器的相关API操作定时器

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

TechIoT

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值