資源描述:
《定時器消息傳遞機(jī)制.doc》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在學(xué)術(shù)論文-天天文庫。
1、MTK定時器消息處理機(jī)制huazjxy@126.comcompany:Huayu一、基本概念及Neclus內(nèi)核定時器初始化expires:指定定時器到期的時間,這個時間被表示成自系統(tǒng)啟動以來的時鐘滴答計數(shù)(也即時鐘節(jié)拍數(shù))。當(dāng)一個定時器的expires值小于或等于jiffies變量時,我們就說這個定時器已經(jīng)超時或到期了。在初始化一個定時器后,通常把它的expires域設(shè)置成當(dāng)前expires變量的當(dāng)前值加上某個時間間隔值(以時鐘滴答次數(shù)計。typedefstructtimertable{/*storethetimer_id.MSB(MostSignificantBit)is
2、align_timer_mask*/U16timer_id[SIMULTANEOUS_TIMER_NUM];/*storetheevent_idthatreturnsfromevshed_set_event()*/eventidevent_id[SIMULTANEOUS_TIMER_NUM];/*storethetimer_expiry_func*/oslTimerFuncPtrcallback_func[SIMULTANEOUS_TIMER_NUM];/*pointtothenextTIMERTABLEdata*/structtimertable*next;}TIMERT
3、ABLE;typedeflcd_dll_node*eventid;structlcd_dll_node{void*data;lcd_dll_node*prev;lcd_dll_node*next;};(1)timer_id:定時器id最多同時12個。(2)雙向鏈表元素event_id:用來將多個定時器調(diào)度動作連接成一條雙向循環(huán)隊列。(3)函數(shù)指針callback_func:指向一個可執(zhí)行函數(shù)。當(dāng)定時器到期時,內(nèi)核就執(zhí)行function所指定的函數(shù),產(chǎn)生expires消息。//L4initthetimer/***********************************
4、*******************************************FUNCTION*L4InitTimer*DESCRIPTION*Thisfunctionistoinitthetimerwhiletaskcreate.**PARAMETERS*aINvoid*RETURNS*VOID.*GLOBALSAFFECTED*external_global*****************************************************************************/voidL4InitTimer(void){/*--
5、--------------------------------------------------------------*//*LocalVariables*//*----------------------------------------------------------------*/TIMERTABLE*p;TIMERTABLE*pp;/*----------------------------------------------------------------*//*CodeBody*//*-------------------------------
6、---------------------------------*//*TrytofreeTIMERTABLElistexcludeg_timer_table*/p=g_timer_table.next;pp=NULL;do{if(p!=NULL){pp=p->next;OslMfree(p);}p=pp;}while(p!=NULL);/*resetg_timer_talbe*/memset(&g_timer_table,0,sizeof(TIMERTABLE));g_timer_table_size=SIMULTANEOUS_TIMER_NUM;g_timer_tab
7、le_used=0;/*Initiatetheclocktimecallbackfunction.*/get_clocktime_callback_func=NULL;set_clocktime_callback_func=NULL;/*Initatethenoalignmentstacktimer*/stack_init_timer(&base_timer1,"MMI_Base_Timer1",MOD_MMI);/*Createanoalignmenttimerschedule*/event_scheduler1