MTK定时器消息机制分析

本文介绍了MTK平台的KAL timer和stack timer,KAL timer基于RTOS,超时触发HISR;stack timer超时后发送消息到任务队列。stack timer在任务中处理消息,确保安全并发。MMI层使用event scheduler结合stack timer实现定时器,通过eventshed_set_event创建调度器并设置超时回调。
摘要由CSDN通过智能技术生成

MTK中有两种timerKAL timer stack timer. 一般在task要管理一组timer,用 stack timer 加上 event scheduler.现在主要介绍这种

KAL timer 是非常底层的timer 它的实现是直接封装MTKRTOS(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);                  //表示是否循环使用timer0 表示 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. 常用函数

//函数作用:初始化定时器

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值