MTK timer 小结 1

MTK timer 有很多种,从最低层的KAL(kernel adpat layer)到MMI,都有timer的身影。

先来看一下KAL的timer

KAL timer 是非常底层的timer, 它的实现是直接封装MTK的RTOS(nuleus)的timer,实现方式是由HISR,从而这种timer具有很高的优先级,

也就是说,当这个timer 超时时,就会触发一个HISR(高级中断 High Level ISR (Interrupt Service Routine)),这个中断会回调注册的回调函数。

所以这种timer 使用时,要比较小心,它的优先级很高,在回调函数运行时,其他事件是得不到处理的。

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 超时时间, timer_id 是 create 返回值,handler_func_ptr是回调函数,

handler_param_ptr 是回调函数返回的参数(一般回调函数都是这么设置,这样很灵活),delay,是超时时间,注意这个参数的单位是ticks

不是ms。reschedule_time 表示是否循环使用timer,0 表示 timer 超时一次就停止,1 表示自动循环启动timer。

 

第二种timer 是 stack timer,这种timer 与 KAL timer 最大的区别是:stack timer 超时后,发送一个超时消息到 相应task的消息队列,

由task的消息队列来处理这个消息,而不像KAL timer,直接在中断状态回调注册函数。从时间的精确性来说,stack timer 可能没有

KAL timer 精确(发送消息,task 切换等都要花费时间),但是 stack 更加的安全(在 task 里处理这个消息),提高并发性(stack timer 到期后

只是发送了一个消息,具体并不处理)。当然 stack timer 底层具体实现还是依靠KAL timer。有一点需要注意的是,当stack timer 超时后,

向消息队列发送了消息,但是这个消息还没有来的处理,这个时候取消了这个timer,需要特别处理,虽然这种情况发生的概率很小。

void stack_init_timer(stack_timer_struct *stack_timer, kal_char *timer_name, module_type module_id);// stack timer 初始化 module_id 是要接受消息的 mdoule,也就是当stack timer 超时,会像改model 发送消息。

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); //启动定时期,timer_index  timer 索引, 超时时间。


转自:

http://blog.csdn.net/yanwuxufeng/archive/2010/07/18/5745187.aspx
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值