ucos ii学习笔记4 软件定时器

ucos ii从V2.83版本以后加入了软件定时器,软件定时器的最快时钟节拍就等于ucos ii的系统时钟节拍,由一个单独的计数器OSTmrTime计时。功能代码在tmr.c里面,

深入的原理现在我也不懂,以后再补上,直接说函数和用法:

1.创建软件定时器函数OS_TMR *_OSTmrCreate(INT32U dly, INT32Uperiod, INT8Uopt, 

OS_TMR_CALLBACK callback, void *callback_arg, INT8U *pname, INT8U *perr);

其中dly表示第一次延时时间节拍数(软件定时器的节拍,不是系统时钟节拍);

period只有在周期定时模式时才有用,表示定时器的周期溢出时间;

opt为定时器的工作模式,有单次定时器和周期定时器两种,值分别为OS_TMR_OPT_ONE_SHOTOS_TMR_OPT_PERIODIC;

callback是定时器的回调函数,当软件定时器的定时时间到达时,会调用这个函数;

callback_arg是回调函数的参数;

pname是软件定时器的名字;

perr,错误信息。

需要注意的是,回调函数有固定的格式,不能自己随便写,格式如下:

void(*OS_TMR_CALLBACK)(void *ptmr, void *parg)。函数名可以自己写,ptmr一般设置类型为 OS_TMR*类型,parg是回调函数的参数,可以不用,但必须有这个参数。

2.开启软件定时器函数 BOOLEAN  OSTmrStart(OS_TMR *ptmr, INT8U *perr);

其中ptmr是软件定时器指针,perr是错误信息。

3.停止软件定时器函数 BOOLEAN  OSTmrStop (OS_TMR  *ptmr, INT8U  opt,  void   *callback_arg, 

INT8U   *perr);

其中ptmr是软件定时器指针,opt为停止选项,可以设置的 值和对应的意义为:

OS_TMR_OPT_NONE         直接停止,不做其他处理;

OS_TMR_OPT_ONE_SHOT停止,用初始化的参数执行一次回调函数;

OS_TMR_OPT_PERIODIC停止,用新的参数执行一次回调函数。

然后callback_arg就是新的参数。perr同样是错误信息。

接下来就是简单的例子了

OS_TMR   * tmr1;			//软件定时器
1OS_TMR   * tmr2;			//软件定时器2
......
tmr1=OSTmrCreate(10,10,OS_TMR_OPT_PERIODIC,(OS_TMR_CALLBACK)tmr1_callback,0,"tmr1",&err);//100ms执行一次
tmr2=OSTmrCreate(10,20,OS_TMR_OPT_PERIODIC,(OS_TMR_CALLBACK)tmr2_callback,0,"tmr2",&err);//200ms执行一次
OSTmrStart(tmr1,&err);//启动软件定时器1				 
OSTmrStart(tmr2,&err);//启动软件定时器2
......        
OSTmrStop(tmr2,OS_TMR_OPT_NONE,0,&err);	//关闭软件定时器2	
......
//软件定时器1的回调函数	
void tmr1_callback(OS_TMR *ptmr,void *p_arg) 
{
 }
//软件定时器2的回调函数				  	   
void tmr2_callback(OS_TMR *ptmr,void *p_arg) 
{	
}


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值