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 

2.2.2 重置一次性定时器

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

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

        opt =OS_OPT_TMR_PERIODIC,dly=0, period>0 

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

        opt =OS_OPT_TMR_PERIODIC,dly>0, period>0

2.3启动定时器

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

3 定时器的实现

3.1 定时器任务的框架


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

3.2 定时器数据结构

3.3 定时器列表

3.3.1 空定时器列表

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

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

4.软件 定时器总结

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

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

  • 12
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

物联网全栈工程猪

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

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

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

打赏作者

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

抵扣说明:

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

余额充值