MTK中有两种timer,KAL timer 和 stack timer. 一般在task要管理一组timer,用 stack timer 加上 event scheduler.现在主要介绍这种
KAL timer 是非常底层的timer, 它的实现是直接封装MTK的RTOS(nuleus)的timer,实现方式是由HISR,从而这种timer具有很高的优先级,当这个timer 超时时,就会触发一个HISR(高级中断 High Level ISR (Interrupt Service Routine)),这个中断会回调注册的回调函数。
kal_timerid kal_create_timer(kal_char* timer_name_ptr); //创建一个timer, 参数是timer的名字
void kal_set_timer(kal_timerid timer_id, //
kal_timer_func_ptr handler_func_ptr, //是回调函数
void* handler_param_ptr, //是回调函数返回的参数
kal_uint32 delay, //是超时时间
kal_uint32 reschedule_time); //表示是否循环使用timer,0 表示 timer 超时一次就停止,1 表示自动循环启动timer。
stack timer与 KAL timer 最大的区别是:stack timer 超时后,发送一个超时消息到 相应task的消息队列,由task的消息队列来处理这个消息,而不像KAL timer,直接在中断状态回调注册函数。从时间的精确性来说,stack timer 可能没有KAL timer 精确(发送消息,task 切换等都要花费时间),但是 stack 更加的安全(在 task 里处理这个消息),提高并发性(stack timer 到期后只是发送了一个消息,具体并不处理)。当然 stack timer 底层具体实现还是依靠KAL timer。
1. 常用函数
//函数作用:初始化定时器