|
MTK 定時器的使用
在使用MTK 定時器前,我們先分析一下定時器的工作機制。
? 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
????????????? 隊列式的, 即可以通過隊列操作,有一定的延時容忍的定時器 .?????????????????????????????? ????
????????? 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( ) -> 處理具體的定時器事件
|
|