1.KAL Timer(kernel adpat layer): 直接封装了RTOS(nuleus)的timer, 实现方式是由HISR, 具有最高的优先级.
即当这个timer超时时, 就会触发一个HISR, 该中断会回调注册的回调函数.
kal_timerid kal_create_timer(kal_char *timer_name_ptr); //创建一个timer, 参数是timer的名字.
void kal_set_timer(kal_timerid ext_t_id, kal_timer_func_ptr handler_func_ptr,
void *handler_param_ptr, kal_uint32 delay, kal_uint32 reshedule_time); //设置timer的超时时间, timer_id是kal_create_timer返回值. handler_func_ptr是回调函数, handler_param_ptr 回调函数返回的参数, delay,超时时间, 单位为ticks不是ms. reshedule_time 表示是否循环使用, 0表示timer超时一次就停止, 1 表示自动循环启动timer.
void kal_cancel_timer(kal_timerid ext_timer); // 停止timer, 参数timer id.
2.stack timer, 与kal timer的最大区别在于: stack timer超时后, 发送一个超时消息到相应task的消息队列, 由消息队列来处理这个消息, 而不像kal timer, 直接在中断状态回调注册函数. 故从时间的精确性来说没有kal timer精确.
但是stack timer更加安全(在task里处理这个消息), 提高并发性(stack 到期后只是发送了一个消息, 具体并不处理).
void stack_init_timer(stack_timer_struct *stack_timer, kal_char *timer_name, module_type mod_id);
kal_bool stack_is_time_out_valid(stack_timer_struct *stack_timer);
void stack_process_time_out(stack_timer_struct *stack_timer);
void stack_start_timer(stack_timer_struct *stack_timer, kal_uint16 timer_indx, kal_uint32 init_time);
stack_timer_status_type stack_stop_timer(stack_timer_struct *stack_timer);