第 8 章 系统定时器接口设计说明
系统定时器接口为应用层提供定时 api 接口,本章节为用户提供技术参考。
1、功能概述
定时器类型
- 1)强节拍
- 接口:usr_timer;优先级:1 ;异步;1、usr_timer 的参数 priority(优先级)为 1,使用该类定时器,系统无法进入低功耗。2、usr_timer 属于异步接口, add 的时候注册的扫描函数将在硬件定时器中时基到时候被调用。
- 2)弱节拍
- 接口:usr_timer;优先级:0 ;异步;1、usr_timer 的参数 priority(优先级)为 0,使用该类定时器,系统低功耗会忽略该节拍,节拍不会丢失,但是周期会变。2、usr_timer 属于异步接口,add 的时候注册的回调函数将在硬件定时器中时基到时候被调用。
- 3)Normal节拍
- 接口:sys_timer;优先级:无 ;同步;1、系统会进入低功耗,节拍不会丢失。2、sys_timer 由 systimer 线程提供时基,属于同步接口,也就是说在哪个线程 add 的 sys_timer,定时时基到了 systimer 线程会发事件通知对应的 add 线程响应(回调函数被执行)。3、需要对应 timer add 的线程响应问题, 不建议在系统主循环线程做定时时间极短的扫描。
timer 与 timerout 区别
sys_timer/usr_timer 与 sys_timerout/usr_timerout 接口区别在于 timeout 接口的回调只会被做一次,也就是设定一个未来的时间, 时间到了响应之后便结束这个定时器的生命周期。
2、详细接口说明
sys_timer 详细接口说明
//*----------------------------------------------------------------------------*/
/**@brief sys_timer 定时扫描增加接口。
@param
priv:私有参数。
func:定时扫描回调函数。
msec:定时时间, 单位:毫秒。
@return 定时器分配的 id 号。
@note
1、系统会进入低功耗,节拍不会丢失。
2、sys_timer 由 systimer 线程提供时基,属于同步接口,也就是说在哪个线程 add 的 sys_timer,定时时基到了。
systimer 线程会发事件通知对应的 add 线程响应(回调函数被执行)。
3、与 sys_timer_del 成对使用。
*/
/*----------------------------------------------------------------------------*/
u16 sys_timer_add(void *priv, void (*func)(void *priv), u32 msec);
//*----------------------------------------------------------------------------*/
/**@brief sys_timer 定时扫描删除接口。
@param
id:sys_timer_add 分配的 id 号。
@return。
@note
1、与 sys_timer_add 成对使用。
*/
/*----------------------------------------------------------------------------*/
usr_timer 详细接口说明
1)usr_timer 在include_lib/system/timer.h
中声明。2)sys_hi_timer 等同为 priority 为 1 的 usr_timer, 在include_lib/system/timer.h
被宏定义。3)sys_s_hi_timer 等同为 priority 为 0 的 usr_timer,在include_lib/system/timer.h
被宏定义。
//*----------------------------------------------------------------------------*/
/**@brief usr_timer 定时扫描增加接口。
@param
priv:私有参数。
func:定时扫描回调函数
msec:定时时间, 单位:毫秒。
priority:优先级,范围:0/1。
@return 定时器分配的 id 号。
@note
1、usr_timer 的参数 priority(优先级)为 1,使用该类定时器,系统无法进入低功耗。
2、usr_timer 的参数 priority(优先级)为 0,使用该类定时器,系统低功耗会忽略该节拍, 节拍不会丢失,但是周期会变。
3、usr_timer 属于异步接口, add 的时候注册的扫描函数将在硬件定时器中时基到时候被调用。
4、对应释放接口 usr_timer_del。
*/
/*----------------------------------------------------------------------------*/
u16 usr_timer_add(void *priv, void (*func)(void *priv), u32 msec, u8 priority);
//*----------------------------------------------------------------------------*/
/**@brief usr_timer 超时增加接口。
@param
priv:私有参数。
func:超时回调函数。
msec:定时时间, 单位:毫秒。
priority:优先级,范围:0/1。
@return 定时器分配的 id 号。
@note
1、usr_timerout 的参数 priority(优先级)为 1,使用该类定时器,系统无法进入低功耗。
2、usr_timerout 的参数 priority(优先级)为 0,使用该类定时器,系统低功耗会忽略该节拍, 节拍不会丢失,但是周期会变。
3、usr_timerout 属于异步接口, add 的时候注册的扫描函数将在硬件定时器中时基到时候被调用。
4、对应释放接口 usr_timerout_del。
5、timeout 回调只会被执行一次。
*/
/*----------------------------------------------------------------------------*/
u16 usr_timeout_add(void *priv, void (*func)(void *priv), u32 msec, u8 priority);