自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

MTK平臺定時(shí)器消息處理機(jī)制

移動開發(fā)
MTK平臺定時(shí)器消息處理機(jī)制是本文要介紹的內(nèi)容,主要是來了解并學(xué)習(xí)MTK中定時(shí)器的處理機(jī)制,具體內(nèi)容的實(shí)現(xiàn)來看本文詳解。

MTK平臺定時(shí)器消息處理機(jī)制是本文要介紹的內(nèi)容,主要是來了解并學(xué)習(xí)MTK定時(shí)器的處理機(jī)制,不多說,具體內(nèi)容的實(shí)現(xiàn)來看本文詳解。

發(fā)送定時(shí)器消息

(1).步驟

StartTimer->L4StartTimer

(2).兩種類型的定時(shí)器

MTK中有兩種類型的定時(shí)器

a、NO_ALIGNMENT

非隊(duì)列式的,即要求立即執(zhí)行的定時(shí)器,時(shí)間到了就自動被reset.

b、ALIGNMENT

隊(duì)列式的,即可以通過隊(duì)列操作,有一定的延時(shí)容忍的定時(shí)器.y

其基本執(zhí)行流程:執(zhí)行定時(shí)器-->超時(shí)?-->保存timerid,eventid--timerstop||noevent?---->END;

  1. |YN|  
  2.  
  3. ||  
  4.  
  5. ---------------------------------------------------------- 

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ù)猜測,應(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ì)列中.

與StartTimer對應(yīng)的StopTimer

(1).具體實(shí)現(xiàn)通過調(diào)用L4StopTimer操作.

(2).作用:找出指定要停止的定時(shí)器ID在隊(duì)列中的位置,然后使用evshed_cancel_event將指定定時(shí)器節(jié)點(diǎn)從隊(duì)列中刪除.

定時(shí)器消息的處理

(1).步驟

...->創(chuàng)建MMITask->設(shè)置MMITask入口函數(shù)->調(diào)用EvshedMMITimerHandler

(2).evshed_timer_handler()->處理具體的定時(shí)器事件

簡單分析MTK定時(shí)器消息事件,由于只是簡單的分析,謬誤定然甚多,忘包涵包涵并不吝指正.

MTK定時(shí)器消息處理機(jī)

一、基本概念及Neclus內(nèi)核定時(shí)器初始化

expires:指定定時(shí)器到期的時(shí)間,這個(gè)時(shí)間被表示成自系統(tǒng)啟動以來的時(shí)鐘滴答計(jì)數(shù)(也即時(shí)鐘節(jié)拍數(shù))。當(dāng)一個(gè)定時(shí)器的expires值小于或等于jiffies變量時(shí),我們就說這個(gè)定時(shí)器已經(jīng)超時(shí)或到期了。在初始化一個(gè)定時(shí)器后,通常把它的expires域設(shè)置成當(dāng)前expires變量的當(dāng)前值加上某個(gè)時(shí)間間隔值(以時(shí)鐘滴答次數(shù)計(jì)。

  1. typedefstructtimertable  
  2. {/*storethetimer_id.MSB(MostSignificantBit)isalign_timer_mask*/  
  3. U16timer_id[SIMULTANEOUS_TIMER_NUM];  
  4. /*storetheevent_idthatreturnsfromevshed_set_event()*/  
  5. eventidevent_id[SIMULTANEOUS_TIMER_NUM];  
  6. /*storethetimer_expiry_func*/  
  7. oslTimerFuncPtrcallback_func[SIMULTANEOUS_TIMER_NUM];  
  8. /*pointtothenextTIMERTABLEdata*/  
  9. structtimertable*next;  
  10. }TIMERTABLE;  
  11. typedeflcd_dll_node*eventid;  
  12. structlcd_dll_node{  
  13. void*data;  
  14. lcd_dll_node*prev;  
  15. lcd_dll_node*next;  
  16. }; 

(1)timer_id:定時(shí)器id最多同時(shí)12個(gè)。

(2)雙向鏈表元素event_id:用來將多個(gè)定時(shí)器調(diào)度動作連接成一條雙向循環(huán)隊(duì)列。

(3)函數(shù)指針callback_func:指向一個(gè)可執(zhí)行函數(shù)。當(dāng)定時(shí)器到期時(shí),內(nèi)核就執(zhí)行function所指定的函數(shù),產(chǎn)生expires消息。

  1. //L4initthetimer  
  2. /*****************************************************************************  
  3. *FUNCTION  
  4. *L4InitTimer  
  5. *DESCRIPTION  
  6. *Thisfunctionistoinitthetimerwhiletaskcreate.  
  7. *  
  8. *PARAMETERS  
  9. *aINvoid  
  10. *RETURNS  
  11. *VOID.  
  12. *GLOBALSAFFECTED  
  13. *external_global  
  14. *****************************************************************************/  
  15. voidL4InitTimer(void)  
  16. {  
  17. /*----------------------------------------------------------------*/  
  18. /*LocalVariables*/  
  19. /*----------------------------------------------------------------*/  
  20. TIMERTABLE*p;  
  21. TIMERTABLE*pp;  
  22. /*----------------------------------------------------------------*/  
  23. /*CodeBody*/  
  24. /*----------------------------------------------------------------*/  
  25. /*TrytofreeTIMERTABLElistexcludeg_timer_table*/  
  26. p=g_timer_table.next;  
  27. pp=NULL;  
  28. do  
  29. {  
  30. if(p!=NULL)  
  31. {  
  32. ppp=p->next;  
  33. OslMfree(p);  
  34. }  
  35. p=pp;  
  36. }while(p!=NULL);  
  37. /*resetg_timer_talbe*/  
  38. memset(&g_timer_table,0,sizeof(TIMERTABLE));  
  39. g_timer_table_size=SIMULTANEOUS_TIMER_NUM;  
  40. g_timer_table_used=0;  
  41. /*Initiatetheclocktimecallbackfunction.*/  
  42. get_clocktime_callback_func=NULL;  
  43. set_clocktime_callback_func=NULL;  
  44. /*Initatethenoalignmentstacktimer*/  
  45. stack_init_timer(&base_timer1,"MMI_Base_Timer1",MOD_MMI);  
  46. /*Createanoalignmenttimerschedule*/  
  47. event_scheduler1_ptr=new_evshed(&base_timer1,  
  48. L4StartBaseTimer,L4StopBaseTimer,  
  49. 0,kal_evshed_get_mem,kal_evshed_free_mem,0);  
  50. /*Initatethealignmentstacktimer*/  
  51. stack_init_timer(&base_timer2,"MMI_Base_Timer2",MOD_MMI);  
  52. /*Createanalignmenttimerschedule*/  
  53. event_scheduler2_ptr=new_evshed(&base_timer2,  
  54. L4StartBaseTimer,L4StopBaseTimer,  
  55. 0,kal_evshed_get_mem,kal_evshed_free_mem,255);  
  56. }  
  57. typedefstructstack_timer_struct_t{  
  58. module_typedest_mod_id;  
  59. kal_timeridkal_timer_id;  
  60. kal_uint16timer_indx;  
  61. stack_timer_status_typetimer_status;  
  62. kal_uint8invalid_time_out_count;  
  63. }stack_timer_struct;  
  64. /*************************************************************************  
  65. *ExportedFunctionPrototypes  
  66. *************************************************************************/  
  67. /*  
  68. *Important:  
  69. *Currentimplementationmax_delay_ticks_disibledevent="text-indent:24pt;line-height:150%"align="left"> 

小結(jié):

MTK平臺定時(shí)器消息處理機(jī)制的內(nèi)容介紹完了,希望通過本文的學(xué)習(xí)能對你有所幫助!

責(zé)任編輯:zhaolei 來源: 互聯(lián)網(wǎng)
相關(guān)推薦

2011-03-17 09:20:05

異常處理機(jī)制

2011-07-01 14:20:59

Qt 事件

2011-07-01 14:14:34

Qt 事件

2014-05-22 14:57:28

Android消息處理機(jī)制Looper

2014-05-22 15:15:53

Android消息處理機(jī)制Looper

2014-05-22 15:18:25

Android消息處理機(jī)制Looper

2014-05-22 15:33:31

Android消息處理機(jī)制Looper

2014-05-22 15:45:58

Android消息處理機(jī)制Looper

2014-05-22 15:41:59

Android消息處理機(jī)制Looper

2014-05-22 15:38:27

Android消息處理機(jī)制Looper

2014-05-22 15:00:16

Android消息處理機(jī)制Looper

2014-05-22 15:04:00

Android消息處理機(jī)制Looper

2014-05-22 15:07:44

Android消息處理機(jī)制Looper

2014-05-22 15:48:50

Android消息處理機(jī)制Looper

2011-07-21 15:20:41

java異常處理機(jī)制

2010-07-28 15:56:22

FlexTimer定時(shí)

2009-11-11 10:14:10

linux定時(shí)器操作系統(tǒng)

2021-07-03 17:53:52

Java異常處理機(jī)制

2009-06-02 10:32:30

Oracle并發(fā)處理

2010-03-05 15:40:16

Python異常
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號