1. 软件定时器简介
定时器:
- 从指定的时刻开始,经过一个指定时间,然后触发一个超时事件,用户可自定义定时器的周期
硬件定时器
- 芯片本身自带的定时器模块,硬件定时器的精度一般很高,每次在定时时间到达之后就会自动触发一个中断,用户在中断服务函数中处理信息。
软件定时器:
- 是指具有定时功能的软件,可设置定时周期,当指定时间到达后要调用回调函数(也称超时函数),用户在回调函数中处理信息
软件定时器优缺点
优点:
- 硬件定时器数量有限,而软件定时器理论上只需有足够内存,就可以创建多个;
- 使用简单、成本低
缺点:
- 软件定时器相对硬件定时器来说,精度不高。 对于需要高精度要求的场合,不建议使用软件定时器
2. 单次定时器和周期定时器
UCOSIII提供了两种软件定时器:
单次定时器
- 单次定时器的一旦定时超时,只会执行一次其软件定时器超时回调函数,不会自动重新开启定时,不过可以被手动重新开启。
周期定时器
- 周期定时器的一旦启动以后就会在执行完回调函数以后自动的重新启动 ,从而周期地执行其软件定时器回调函数。
3. 软件定时器4种状态:
注意:新创建的软件定时器处于停止状态 ,也就是未运行的!
UCOSIII软件定时器特点
- 支持裁剪:软件定时器支持裁剪, 如需使能软件定时器,需将
OS_CFG_TMR_EN
配置项配置成 1 - 注意:软件定时器的超时回调函数是由软件定时器服务任务调用的,软件定时器的超时回调函数本身不是任务,因此不能在该回调函数中使用可能会导致任务阻塞的 API 函数。
- 软件定时器的频率由宏
OS_CFG_TMR_TASK_RATE_HZ
决定,要注意软件定时器的频率并不等于系统时钟节拍的频率,但软件定时器是依靠系统节拍实现定时的,所以需要进行换算:
4. UCOSIII软件定时器相关API函数
void 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 )
单次软件定时器的时序图
周期软件定时器的时序图
4.1 删除一个软件定时器
CPU_BOOLEAN OSTmrDel( OS_TMR* p_tmr , OS_ERR* p_err)
4.2 停止软件定时器定时
CPU_BOOLEAN OSTmrStop( OS_TMR* p_tmr,
OS_OPT opt,
void* p_callback_arg,
OS_ERR* p_err )
评论区