MTK定时器消息机制分析 (转载)

MTK定时器消息机制分析 (转载)
1.   数据结构
     (1). stack_timer_struct
          定时器类型的信息结构( 其主要作用似乎是用以装载待发送的定时器消息数据 )
     (2). TIMERTABLE
          定时器队列节点结构( 其由主要元素mmi_frm_timer_type结构及链表指针两个元素组成 )
     (3). event_scheduler
          队列信息结构
     (4). mmi_frm_timer_type
          定时器信息结构
2.   L4定时器初始化
     (1). 步骤
          ...-> 创建MMI Task -> 设置MMI Task初始化函数 -> 在该函数中调用 L4InitTimer
     (2). 作用
          初始化定时器队列并设置基本定时器1,2
3.   发送定时器消息
     (1). 步骤
          StartTimer -> L4StartTimer
     (2). 两种类型的定时器
          MTK中有两种类型的定时器
          a. NO_ALIGNMENT
              非队列式的,即要求立即执行的定时器,时间到了就自动被reset.
          b. ALIGNMENT
              队列式的, 即可以通过队列操作,有一定的延时容忍的定时器 .                                   y
              其基本执行流程: 执行定时器 --> 超时? --> 保存timer id,event id -- timer stop || no event ?----> END ;
                                   |               Y                                       N|
                                   |                                                        |
                                   ----------------------------------------------------------                             
          c. 除了触摸屏和手写,其他情况下的定时器一般都是队列式的.                                                                                       
                                                                                                           
     (3). L4StartTimer的作用
          判断将要发送的定时器ID,根据是否是队列类型传递给不同的队列结构(event_sheduler1/event_sheduler2) ;
     (4). TimerExpiry
              这是作为参数传递给L4StartTimer的回调函数,由于MTK做了一定的封装,因此其内部具体回调触发过程
          无法得知,但根据猜测,应该是在定时时间一到,以中断的方式发出消息(MSG_ID_TIMER_EXPIRY),并将其写到
          MMI的循环队列.
              该函数可能是在L4CallBackTimer中调用的,L4CallBackTimer的作用如下:
              a. 重置当前定时器信息结构(mmi_frm_timer_type) ;
              b. 执行定时器到点后的执行函数(TimerExpiry) ;
              c. 讲Timer消息写到MMI循环队列中 .
4.   与StartTimer对应的StopTimer
     (1). 具体实现通过调用L4StopTimer操作.
     (2). 作用: 找出指定要停止的定时器ID在队列中的位置,然后使用evshed_cancel_event将指定定时器节点从队列
                中删除.
               
5.   定时器消息的处理
     (1). 步骤
          ...-> 创建MMI Task -> 设置MMI Task入口函数 -> 调用 EvshedMMITimerHandler
     (2). evshed_timer_handler( ) -> 处理具体的定时器事件
     
6.   小结
     简单分析MTK定时器消息事件,由于只是简单的分析,谬误定然甚多,忘包涵包涵并不吝指正.

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值