博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MTK定时器消息机制分析
阅读量:4046 次
发布时间:2019-05-24

本文共 1345 字,大约阅读时间需要 4 分钟。

  • 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定时器消息事件,由于只是简单的分析,谬误定然甚多,忘包涵包涵并不吝指正. 

转载地址:http://rwedi.baihongyu.com/

你可能感兴趣的文章
9、VUE面经
查看>>
关于进制转换的具体实现代码
查看>>
Golang 数据可视化利器 go-echarts ,实际使用
查看>>
mysql 跨机器查询,使用dblink
查看>>
mysql5.6.34 升级到mysql5.7.32
查看>>
dba 常用查询
查看>>
Oracle 异机恢复
查看>>
Oracle 12C DG 搭建(RAC-RAC/RAC-单机)
查看>>
Truncate 表之恢复
查看>>
Oracle DG failover 后恢复
查看>>
mysql 主从同步配置
查看>>
为什么很多程序员都选择跳槽?
查看>>
mongdb介绍
查看>>
mongdb安装使用
查看>>
mongdb在java中的应用
查看>>
区块链技术让Yotta企业云盘为行政事业服务助力
查看>>
Yotta企业云盘更好的为媒体广告业服务
查看>>
Yotta企业云盘助力旅游行业新发展
查看>>
Yotta企业云盘助力科技行业创高峰
查看>>
Yotta企业云盘更好地为教育行业服务
查看>>