UCOSIII 定时器 os_tmr

定时器

一、创建定时器任务
void OSTmrCreate(	OS_TMR				   *p_tmr,				//指向任务的TCB指针
                    CPU_CHAR			   *p_name,				//为任务提供名称
                    OS_TICK				 	dly,				
                    //提供单次或周期计时的时间,在周期计时中,该时间为等待的第一个超时
                   	OS_TICK				 	period,				//周期计时中循环的时间
                    OS_OPT				 	opt,				
                    //模式选择			OS_OPT_TMR_ONE_SHOT			OS_OPT_TMR_PERIODIC
                    OS_TMR_CALLBACK_PTR		p_callback,			
                    //在计时器到期后的回调函数    格式为 void MyCallback(OS_TMR *p_tmr,void *p_arg)
                   	void				   *p_callback_arg,		//调用回调函数时传递给回调函数的参数
                   	OS_ERR				   *p_err)

p_err 参数:

  • OS_ERR_NONE
  • OS_ERR_ILLEGAL_CREATE_RUN_TIME 在调用OSSafetyCriticalStart()之后创建定时器
  • OS_ERR_OBJ_CREATED 该定时器已被创建
  • OS_ERR_OBJ_PTR_NULL p_tmr 为NULL
  • OS_ERR_OPT_INVALID 指定的选项无效
  • OS_ERR_TMR_INVALID_DLY 在单次延时中 指定的延时为0
  • OS_ERR_TMR_INVALID_PERIOD 指定的周期为0
  • OS_ERR_TMR_ISR 调用来自中断

该函数只创建计时器,换句话说,计时器仅仅被创建而非开始,如果要开始计时器,调用OS_TmrStart()

二、删除定时器
CPU_BOOLEAN OSTmrDel(OS_TMR    *p_tmr,
                     OS_ERR    *p_err);

p_err参数:

  • OS_ERR_NONE
  • OS_ERR_OBJ_TYPE p_tmr没有指向一个定时器
  • OS_ERR_TMR_INVALID p_tmr为NULL
  • OS_ERR_TMR_ISR 在中断中调用
  • OS_ERR_TMR_INACTIVE 定时器没有被创建
  • OS_ERR_TMR_INVALID_STATE 定时器状态错误

return

  • DEF_TRUE 定时器已被清除
  • DEF_FALSE 没有被删除或报错
三、获取定时器还有多少时间完成计时
OS_TICK OSTmrReemainGet(OS_TMR    *p_tmr,
                        OS_ERR    *p_err);

当定时器为周期定时器时,如果被暂停,如果dly == 0 返回period 反则返回 dly

四、开启定时器
CPU_BOOLEAN OSTmrStart(OS_TMR    *p_tmr,
                       OS_ERR    *p_err);

在运行时 重新启动计时器 将剩余时间再设置为Dly

注意:

启动/重新启动计时器处于PERIODIC或ONE-SHOT模式,都会使用OS_OPT_LINK_DLY选项将计时器链接到计时器列表,此选项设置计时器初始到期时间。对于处于PERIODIC模式的计时器,后续到期时间由OS_TmrTask()处理

五、获取定时器状态
OS_STATE OSTmrStateGet(OS_TMR    *p_tmr,
                       OS_ERR    *p_err);

状态

  • OS_TMR_STATE_UNUSED 定时器未被创建
  • OS_TMR_STATE_STOPPED 定时器已经创建但没有启动或已经被暂停
  • OS_TMR_STATE_COMPLATE 定时器为单次计时且计时已经到期
  • OS_TMR_STATE_RUNNING 定时器正在运行
六、停止时间计时器
CPU_BOOLEAN OSTmrStop(OS_TMR	*p_tmr,
                      OS_OPT	 opt,
                      void		*p_callback_arg,
                      OS_ERR	*p_err);
/*
opt :  功能选项
OS_OPT_TMR_NONE				仅仅暂停计时器
OS_OPT_TMR_CALLBACK			执行回调函数,将创建计时器时指定的回调参数传递给它
OS_OPT_TMR_CALLBACK_ARG		执行回调函数,将本函数调用中指定的回调参数传递给它

p_callback_arg:				指向新的回调参数的指针,本参数传递给回调函数,而非计时器的回调参数

p_err:
OS_ERR_TMR_NO_CALLBACK		定时器没有定义回调函数
*/
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值