UCOS_III学习笔记(二)

本文详细介绍了UCOS_III操作系统中的定时器功能。当OS_CFG_TMR_EN设置为1时,定时器服务启动。定时器回调函数在定时器任务中执行,需要注意回调函数的执行时间和堆栈需求,且不应导致阻塞。定时器列表的结构与时钟节拍类似,新添加的定时器按剩余时间排序,UC/OS允许根据内存限制创建多个定时器。
摘要由CSDN通过智能技术生成

定时器

定时器是一个内核对象–通过对OS_CFG_TMR_EN置1,定时器服务才被启动。

Notes:UCOS_III不一定非要一个时钟节拍,对于一些低功耗的应用也不需要用到节拍,相应的,这时这些个低功耗应用也就不能使用那些关于时钟节拍的系统API


OS_TMR对象的定义

struct  os_tmr {
#if OS_OBJ_TYPE_REQ > 0u
       OS_OBJ_TYPE          Type;                           /*Used for checking if a  element which is of the correct type has been sent to the OSTmr???()*/ 
#endif
#if OS_CFG_DBG_EN > 0u
    CPU_CHAR            *NamePtr;                           /* Name to give the timer                                 */
#endif
    OS_TMR_CALLBACK_PTR  CallbackPtr;                       /* Function to call when timer expires                    */
    void                *CallbackPtrArg;                    /* Argument to pass to function when timer expires        */
    OS_TMR              *NextPtr;                           /* Double link list pointers   for a tmr list                           */
    OS_TMR              *PrevPtr;
    OS_TICK              Remain;                            /* Amount of time remaining before timer expires          */
    OS_TICK              Dly;                               /* Delay before start of repeat                           */
    OS_TICK              Period;                            /* Period to repeat timer                                 */
    OS_OPT               Opt;                               /* Options (see OS_OPT_TMR_xxx)   sent to the OSTmrStart() as an argument                        */
    OS_STATE             State;
#if OS_CFG_DBG_EN > 0u
    OS_TMR              *DbgPrevPtr;
    OS_TMR              *DbgNextPtr;
#endif
};

Notes:
1)回调函数的执行是在定时器任务内完成的–要确保有足够的堆栈
2)回调函数执行的顺序依赖于其在定时器列表表中的位置
3)回调函数执行的时间大幅度影响了定时器任务的执行时间
4)回调函数不允许阻塞–影响定时器任务的执行时间
5)调用回调函数时,调度器是上了锁的,所以应该尽快结束执行回调函数


定时器列表

定时器列表与时钟节拍列表的工作机制非常相似

类比时钟节拍轮的数据结构,定时器列表中也存在一个OSCfg_TmrWheel[]的结构

表中的每一个条目有三个域–NbrEntriesMax,NbrEntries,FirstPtr

且FirstPtr指向的定时器链表也是已经排好序的

新建定时器向列表中的添加是,剩余时间较少的定时器排在表头,多的在后边

OS_TmrTask()执行的时候调度器是上了锁的

UC/OS允许用户创建任意数量的定时器(只受可用RAM大小的限制)

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值