前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >uCOS | 软件定时器

uCOS | 软件定时器

作者头像
飞哥
发布2020-07-10 10:25:14
1.2K0
发布2020-07-10 10:25:14
举报
文章被收录于专栏:电子技术研习社

今天说一下uCOS的软件定时器。

定时器有硬件定时器和软件定时器之分:

硬件定时器是芯片本身提供的定时功能。一般是由外部晶振提供给芯片输入时钟,芯片向软件模块提供一组配置寄存器,接受控制输入,到达设定时间值后芯片中断控制器产生时钟中断。硬件定时器的精度一般很高,可以达到纳秒级别,并且是中断触发方式。

软件定时器,软件定时器是由操作系统提供的一类系统接口,它构建在硬件定时器基础之上,使系统能够提供不受硬件定时器资源限制的定时器服务,它实现的功能与硬件定时器也是类似的。

软件定时器在被创建之后,当经过设定的时钟计数值后会触发用户定义的回调函数。定时精度与系统时钟的周期有关。一般系统利用 SysTick 作为软件定时器的基础时钟,软件定时器的回调函数类似硬件的中断服务函数,所以,回调函数也要快进快出,而且回调函数中不能有任何阻塞任务运行的情况(软件定时器回调函数的上下文环境是任务),比如 OSTimeDly()以及其它能阻塞任务运行的函数,两次触发回调函数的时间间隔 period 叫定时器的定时周期。

接下来说一下软件定时器的相关函数。

1、创建软件定时器函数OSTmrCreate()

OSTmrCreate ((OS_TMR *)&my_tmr, //软件定时器对象

(CPU_CHAR *)"MySoftTimer", //命名软件定时器

(OS_TICK )10, //定时器初始值,依10Hz时基计算,即为1s

(OS_TICK )10, //定时器周期重载值,依10Hz时基计算,即为1s

(OS_OPT )OS_OPT_TMR_PERIODIC,//周期性定时

(OS_TMR_CALLBACK_PTR )TmrCallback, //回调函数

(void *)"Timer Over!", //传递实参给回调函数

(OS_ERR *)err); //返回错误类型

这里稍微注意一下,第三个参数是初始延时,第四个参数是定时周期。倒数第二个参数是一个回调函数,相当于我们的中断函数。所以在调用这个软件定时器创建函数之前,应该先写一个回调函数,否则会报错。

void TmrCallback (OS_TMR *p_tmr,void*p_arg)

{

}

关于定时时间,这个和软件定时器的中断频率有关,这个在os_cfg_app.h这个头文件里有定义。

#define OS_CFG_TMR_TASK_RATE_HZ 10u //定时器的时基 (一般不能大于 OS_CFG_TICK_RATE_HZ )

比如这里定时器的时基是10Hz,那么也就是发生一次定时中断的时间是100ms,那么计数十次当然就算1s了,这就算上面一秒的计算方法,我们也可以修改这个宏来改变定时器时基,但是不能大于系统的时钟节拍。

2、启动软件定时器函数OSTmrStart()

OSTmrStart ((OS_TMR *)&my_tmr,//软件定时器对象

(OS_ERR *)err); //返回错误类型

3、停止定时器函数 OSTmrStop()

CPU_BOOLEAN OSTmrStop (OS_TMR *p_tmr, //定时器控制块指针

OS_OPT opt, //选项

void *p_callback_arg,//传给回调函数的新参数

OS_ERR *p_err) //返回错误类型

4、删除软件定时器函数 OSTmrDel()

CPU_BOOLEAN OSTmrDel (OS_TMR *p_tmr,//定时器控制块指针

OS_ERR *p_err)//返回错误类型

总结:软件定时器可以缓解硬件定时器数量的限制,理论上可以创建无数多个软件定时器,只要RAM足够大。软件定时器的精度比不上硬件定时器,适用于对精度要求不高的场合。另外,回调函数是在定时器任务中被调用,所以回调函数的上下文环境是在任务中,并且运 行回调函数时调度器处于被锁状态。一般我们编写的回调函数越简短越好,并且不能在回调函数中等待消息队列、信号量、事件等操作,否则定时器任务会被挂起,导致定时器任务崩溃,这是绝对不允许的。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-04-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 电子技术研习社 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档