|
MTK 定時(shí)器的使用
在使用MTK 定時(shí)器前,我們先分析一下定時(shí)器的工作機(jī)制。
? MTK定時(shí)器基本分析
接下來,我從下面幾個(gè)要點(diǎn)對(duì)MTK定時(shí)器進(jìn)行分析。
1.?? 數(shù)據(jù)結(jié)構(gòu)
???? (1). stack_timer_struct
????????? 定時(shí)器類型的信息結(jié)構(gòu)( 其主要作用似乎是用以裝載待發(fā)送的定時(shí)器消息數(shù)據(jù) )
???? (2). TIMERTABLE
????????? 定時(shí)器隊(duì)列節(jié)點(diǎn)結(jié)構(gòu)( 其由主要元素mmi_frm_timer_type結(jié)構(gòu)及鏈表指針兩個(gè)元素組成 )
???? (3). event_scheduler
????????? 隊(duì)列信息結(jié)構(gòu)
???? (4). mmi_frm_timer_type
????????? 定時(shí)器信息結(jié)構(gòu)
2.?? L4定時(shí)器初始化
???? (1). 步驟
???????? ..--> 創(chuàng)建MMI Task --> 設(shè)置MMI Task初始化函數(shù) --> 在該函數(shù)中調(diào)用 L4InitTimer
???? (2). 作用
????????? 初始化定時(shí)器隊(duì)列并設(shè)置基本定時(shí)器1,2
3.?? 發(fā)送定時(shí)器消息
???? (1). 步驟
????????? StartTimer -> L4StartTimer
???? (2). 兩種類型的定時(shí)器
????????? MTK中有兩種類型的定時(shí)器
????????? a. NO_ALIGNMENT
????????????? 非隊(duì)列式的,即要求立即執(zhí)行的定時(shí)器,時(shí)間到了就自動(dòng)被reset.
????????? b. ALIGNMENT
????????????? 隊(duì)列式的, 即可以通過隊(duì)列操作,有一定的延時(shí)容忍的定時(shí)器 .?????????????????????????????? ????
????????? c. 除了觸摸屏和手寫,其他情況下的定時(shí)器一般都是隊(duì)列式的.??????????????????????????????????????????????????????????????????????????????????????
??????????????????????????????????????????????????????????????????????????????????????????????????????????
???? (3). L4StartTimer的作用
????????? 判斷將要發(fā)送的定時(shí)器ID,根據(jù)是否是隊(duì)列類型傳遞給不同的隊(duì)列結(jié)構(gòu)(event_sheduler1/event_sheduler2) ;
???? (4). TimerExpiry
????????????? 這是作為參數(shù)傳遞給L4StartTimer的回調(diào)函數(shù),由于MTK做了一定的封裝,因此其內(nèi)部具體回調(diào)觸發(fā)過程
????????? 無法得知,但根據(jù)猜測(cè),應(yīng)該是在定時(shí)時(shí)間一到,以中斷的方式發(fā)出消息(MSG_ID_TIMER_EXPIRY),并將其寫到
?????? ???MMI的循環(huán)隊(duì)列.
????????????? 該函數(shù)可能是在L4CallBackTimer中調(diào)用的,L4CallBackTimer的作用如下:
????????????? a. 重置當(dāng)前定時(shí)器信息結(jié)構(gòu)(mmi_frm_timer_type) ;
????????????? b. 執(zhí)行定時(shí)器到點(diǎn)后的執(zhí)行函數(shù)(TimerExpiry) ;
????????????? c. 講Timer消息寫到MMI循環(huán)隊(duì)列中 .
4.?? 與StartTimer對(duì)應(yīng)的StopTimer
???? (1). 具體實(shí)現(xiàn)通過調(diào)用L4StopTimer操作.
???? (2). 作用: 找出指定要停止的定時(shí)器ID在隊(duì)列中的位置,然后使用evshed_cancel_event將指定定時(shí)器節(jié)點(diǎn)從隊(duì)列中刪除.
5. 定時(shí)器消息的處理
???? (1). 步驟
????????? ..-> 創(chuàng)建MMI Task -> 設(shè)置MMI Task入口函數(shù) -> 調(diào)用 EvshedMMITimerHandler
???? (2). evshed_timer_handler( ) -> 處理具體的定時(shí)器事件
|
|