本文内容简介:
包含软件定时器的介绍。回调函数的介绍。以及软件定时器相关的部分API讲解
重点在于最后的软件定时器操作步骤 |
- 定时器本质是递减计数器,当计数器减到零时可以触发某种动作的执行,这个动作通过回调函数来实现。当定时器计时完成时,定义的回调函数就会被立即调用,应用程序可以有任意数量的定时器,UCOSIII中定时器的时间分辨率由一个宏OS_CFG_TMR_TASK_RATE_HZ:表示步长,比如一次100ms,那么10次就是1s,单位为HZ,默认为100Hz。
注意!一定要避免在回调函数中使用阻塞调用或者可以阻塞或删除定时器任务的函数。
- 使能宏:通过OS_CFG_TMR_EN 使能为 1
- 回调函数?
回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数。回调函数不是由该函数的实现方法直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应。
API:创建,删除,启动,停止,得到时间,得到状态 |

OSTmrCreate (OS_TMR *p_tmr, //结构体描述定时器
CPU_CHAR *p_name,//名字
OS_TICK dly, //初始延时的第一个周期
OS_TICK period,//除了第一个周期,之后的所有周期
OS_OPT opt, //选择单次还是周期定时器
OS_TMR_CALLBACK_PTR p_callback,//回调函数
void *p_callback_arg,//回调函数的参数
OS_ERR *p_err)
CPU_BOOLEAN OSTmrStart (OS_TMR *p_tmr,
OS_ERR *p_err)
CPU_BOOLEAN OSTmrStop (OS_TMR *p_tmr,//结构体
OS_OPT opt, //CALLBACK在没有计数到0的时候,就执行了stop也可以执行回调函数
void *p_callback_arg,//回调函数新参数
OS_ERR *p_err);
- 单次定时器中dly有效,period是无效的,并且单次定时器也可以多次start
- 周期定时器:1. dly为0就是无初始延时定时器 2.dly有值就是有初始延时周期定时器
1-使能 宏
2-定义tmr1,2 以及 相应回调函数:void tmr1_callback(void *p_tmr, void *p_arg);
3-OSTmrCreate创建定时器
4-在任务中使用start和stop
|