我的第一篇技术性文章。
stack timer的使用过程:
1 初始化timer
stack_timer_struct *timer_adcsche;
stack_init_timer(timer_adcsche, "ADC Sche Timer", MOD_BMT);//初始化,三个参数分别为timer id,timer name和MODULE id
event_scheduler *adc_sche_event_scheduler_ptr;
adc_sche_event_scheduler_ptr = new_evshed(timer_adcsche,
adc_sche_start_base_timer,
adc_sche_stop_base_timer,
0 , kal_evshed_get_mem, kal_evshed_free_mem, 255);
//创建一个event scheduler,六个参数分别为初始化中已经初始化好的timer id,Start timer函数,stop timer函数,无符号的int数(还不知道有什么用,在这里为0),分配内存的函数,释放内存的函数,最后是delay time,最大可延迟时间,这个表示timer的准确度,这个参数的作用主要是用于节省电池。。
adc_sche_set_timer_page_align(KAL_TRUE);//This function is to set up timer as page align or not.猜测align应该为alignment.设定是否为alignment timer,即是否对timer进行调整,如果传入kal_ture,会调用evshed_set_aligned_timer(void *timer_id, kal_uint8 max_delay);其中的timer id是全局变量。
2set timer
MeasParameter adc_parameters[MAX_CHANNEL];
void adc_sche_set_timer(kal_uint8 adc_sche_id, kal_uint32 tick, kal_timer_func_ptr call_func)
{
adc_parameters[adc_sche_id].adc_sche_event_id = evshed_set_event(adc_sche_event_scheduler_ptr,
(kal_timer_func_ptr)call_func, &adc_parameters[adc_sche_id], tick);
//4个参数分别为在初始化中new_evshed创建的adc_sche_event_scheduler_ptr,timer超时后的回调函数,回调函数的参数,最后一个是elapse time,一般设为1
}
上面是mmi timer的基础