UCOSII系统定时器的使用

下面是我原来用UCOSII定时器的总结,(我系统时间片设置为10ms,定时器时间片100ms)。希望能帮到你
(不过个人觉得UCOS提供的定时器不怎么好使,还不如自己用任务自己创建定时器用起来顺手)
//==================================================================================================
// 3 系统定时器的使用
//==================================================================================================

3.1 说明

    UCOS-II 2.81以后的版本提供了系统定时器, 可提供周期的或一次性的延时来执行某函数

3.2 系统定时器函数

3.2.1 创建一个定时器

OS_TMR * OSTmrCreate (INT32U dly, INT32U period, INT8U opt, OS_TMR_CALLBACK callback, void *callback_arg, INT8U *pname, INT8U *perr);

    opt          === 表示此定时器的类型: OS_TMR_OPT_ONE_SHOT表示是一次性延时, OS_TMR_OPT_PERIODIC表示周期性延时
    dly          === 一次性延时时表示延时时间, 周期性延时时表示进入周期延时前的第一次延时时间, 当前内核设置的延时单位是100ms
    period       === 周期性延时时表示周期性延时的时间, 延时单位100ms 
    callback     === 回调函数
    callback_arg === 回调函数的参数
    pname        === 定时器的名称, 这个无所谓
    perr         === 返回错误状态

    返回值       === 若成功, 则返回定时器的句柄

3.2.2 删除定时器

BOOLEAN OSTmrDel(OS_TMR *ptmr, INT8U *perr);

删除定时器, 系统当前配置允许使用16个定时器, 因此不用的定时器应及时删掉

3.2.3 取得定时器距离下次超时还有多长时间, 单位为100ms

INT32U OSTmrRemainGet(OS_TMR *ptmr, INT8U *perr);

3.2.4 取得定时器的状态

INT8U OSTmrStateGet(OS_TMR *ptmr, INT8U *perr);

返回值: OS_TMR_STATE_UNUSED  - 表示该定时器未创建
        OS_TMR_STATE_STOPPED - 定时器创建后还未启动或还未停止
        OS_TMR_COMPLETED     - 定时器为一次超时定时器并且已经完成了timeout超时
        OS_TMR_RUNNING       - 定时器正在运行

3.2.5 启动定时器

BOOLEAN OSTmrStart(OS_TMR *ptmr, INT8U *perr);

启动定时器或重启定时器, 定时器必须已经创建, 若定时器是一次超时定时器并且已经超时, 则该定时器重新以创建时的超时时限运行一次

3.2.6 停止定时器

BOOLEAN OSTmrStop(OS_TMR *ptmr, INT8U opt, void *callback_arg, INT8U *perr);

    opt   --- OS_TMR_OPT_NONE, 停止定时器
          --- OS_TMR_OPT_CALLBACK, 停止定时器并执行一次回调函数
          --- OS_TMR_OPT_CALLBACK_ARG, 停止定时器并以callback_arg为参数执行一次回调函数

3.2.7 关于定时器的几点说明

3.2.7.1 定时器每隔100ms计数加1, 创建时的延时参数都以此为单位

3.2.7.2 系统定时器有一个低优先级的系统任务维护, 精度也就是一般凑合吧

3.2.7.3 系统定时器任务执行超时函数时将调度器给锁了, 因此不要在超时函数中进行等待等时间过长的循环
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值