MTK-面試的幾個(gè)主要問(wèn)題_第1頁(yè)
MTK-面試的幾個(gè)主要問(wèn)題_第2頁(yè)
MTK-面試的幾個(gè)主要問(wèn)題_第3頁(yè)
MTK-面試的幾個(gè)主要問(wèn)題_第4頁(yè)
MTK-面試的幾個(gè)主要問(wèn)題_第5頁(yè)
已閱讀5頁(yè),還剩7頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

MTK知識(shí)點(diǎn)1按鍵處理流程 12高亮處理機(jī)制 23MTK內(nèi)存管理 84任務(wù)管理 105事件機(jī)制 106定時(shí)器消息機(jī)制 101按鍵處理流程主要簡(jiǎn)單分析一下左右軟件的事件,以左軟鍵事件為例牽涉到的常用函數(shù):voidSetKeyHandler(FuncPtrfuncPtr,U16keyCode,U16keyType);voidSetLeftSoftkeyFunction(void(*f)(void),MMI_key_event_typek);voidChangeLeftSoftkey(U16s,U16i);1.SetKeyHandler與SetLeftSoftkeyFunction(1).SetKeyHandler主要作用就是將需要起作用的函數(shù)的指針(funcPtr)-->全局矩陣數(shù)組currKeyFuncPtrs[keyCode][keyType]的指定位置;(2).SetLeftSoftkeyFunction該函數(shù)內(nèi)部主要流程:Step1.callregister_left_softkey_handler()這個(gè)函數(shù)callSetKeyHandler:存儲(chǔ)需要起作用的函數(shù)(left_softkey_down/left_softkey_up)以left_softkey為例,該函數(shù)首先首先刷新按鍵區(qū)域圖像(redraw_softkey),然后執(zhí)行關(guān)聯(lián)函數(shù)(softkey_functions[key][k]).Step2.在上一步里我們會(huì)發(fā)現(xiàn),softkey_functions[key][k]里的函數(shù)指針沒(méi)有初始化通過(guò)callset_left_softkey_function(f,k);>softkey_functions[key][k]=f;這樣,就成功的把按鍵按下/放開(kāi)的作用函數(shù)與具體的動(dòng)作關(guān)聯(lián)起來(lái)了。Step3.最后callSetInputboxLSKFunction(f)>將上述函數(shù)與特定的輸入(如觸摸筆)關(guān)聯(lián)起來(lái)。(3).以上兩個(gè)函數(shù)的主要區(qū)別:SetLeftSoftkeyFunction可以識(shí)別長(zhǎng)按狀態(tài)并且可以關(guān)聯(lián)觸摸筆操作等。2.ChangeLeftSoftkey主要執(zhí)行流程:Step1.callchange_left_softkey:設(shè)置左軟鍵圖表,文字Step2.redraw_softkey:刷新左軟鍵顯示區(qū)域2高亮處理機(jī)制MTK高亮機(jī)制1介紹:...32相關(guān)函數(shù)和變量列表:...33高亮機(jī)制說(shuō)明:...54相關(guān)知識(shí)點(diǎn)說(shuō)明:...71介紹:本文旨在介紹MTK平臺(tái)高亮機(jī)制的處理邏輯,相信能對(duì)剛?cè)胧諱TK平臺(tái)的同學(xué)有一定幫助,也能給平時(shí)為了項(xiàng)目進(jìn)度和其他原因,對(duì)MTK的這些基本常識(shí)不求甚解,只能依葫蘆畫(huà)瓢的添加菜單和處理函數(shù)的同學(xué)一個(gè)警醒和幫助,能主動(dòng)去深入了解問(wèn)題和提高自己。本人從事MTK的時(shí)間也不長(zhǎng),上面的話有些托大,對(duì)新手還是說(shuō)得過(guò)去的。文檔中有些地方不正確和清楚的,歡迎評(píng)論和討論。2相關(guān)函數(shù)和變量列表:voidRegisterHighlightHandler(void(*f)(S32item_index))注冊(cè)窗口的通用高亮處理函數(shù)。MMI_list_highlight_handler通用高亮處理函數(shù)的全局變量指針。voidExecuteCurrHiliteHandler(S32hiliteid)當(dāng)前高亮菜單項(xiàng)的通用處理函數(shù),它會(huì)找到菜單項(xiàng)對(duì)應(yīng)的處理函數(shù)。一般在窗口創(chuàng)建過(guò)程中被創(chuàng)建RegisterHighlightHandler(ExecuteCurrHiliteHandler)。FuncPtrmmi_frm_get_hilite_hdlr(U16menu_id)獲取menu_id對(duì)應(yīng)的菜單高亮函數(shù),從兩個(gè)函數(shù)指針數(shù)組里獲取。先查找動(dòng)態(tài)菜單的高亮函數(shù)指針數(shù)組,這個(gè)是在程序中動(dòng)態(tài)添加的數(shù)組;如果找不到,再到靜態(tài)數(shù)組里查找,這個(gè)數(shù)組是在編譯過(guò)程中生成的,通常我們?cè)趓es_mainmenu.c等函數(shù)里增加的菜單會(huì)被資源生成工具編譯成一個(gè)靜態(tài)數(shù)組。mmi_frm_int_hilite_hdlr_table[]動(dòng)態(tài)數(shù)組。mmi_frm_const_hilite_hdlr_table[]靜態(tài)數(shù)組。currParentID當(dāng)前父窗口全局變量voidSetHiliteHandler(U16itemid,FuncPtrhiliteFuncPtr)設(shè)置動(dòng)態(tài)高亮數(shù)組的MENUID及它相對(duì)應(yīng)的處理函數(shù),一般用在自定義的菜單項(xiàng)。比如在圖片瀏覽、JAVA應(yīng)用、WAP記錄等不可預(yù)期菜單項(xiàng)數(shù)目的環(huán)境,我們不可能做靜態(tài)的MENUID和處理函數(shù),就需要用到動(dòng)態(tài)的實(shí)現(xiàn)方式。hintData[][][待確認(rèn)]:這是一個(gè)動(dòng)態(tài)菜單的數(shù)據(jù)緩沖,和MENUID一一對(duì)應(yīng)。通俗一點(diǎn)說(shuō),就是菜單的顯示字符串。網(wǎng)上有文章對(duì)此以及ConstructHintsList()理解應(yīng)該有誤,主要是因?yàn)榇a里該函數(shù)注釋說(shuō)是處理靜態(tài)的,應(yīng)該是注釋錯(cuò)了。引用一段描述:3、ConstructHintsList()ConstructsHintListforastaticmenuscreenvoidConstructHintsList(U16parentID,U8**hintArray){。。。。。。(*maxHiliteInfo[hiliteItemID[i]].hintFuncPtr)(idx);//SetHintHandler注冊(cè)的函數(shù)的函數(shù)在此被執(zhí)行hintArray[idx]=hintData[idx];//該語(yǔ)句是該函數(shù)的核心,就是將全局變量hintData[idx]數(shù)組地址//賦給用戶傳過(guò)來(lái)的指針數(shù)組;至于hintData[idx]中是否有數(shù)據(jù)不//管;hintData[idx]的數(shù)據(jù)會(huì)在調(diào)用SetHintHandler注冊(cè)的函數(shù)時(shí)對(duì)其//進(jìn)行初始化;要記住SetHintHandler注冊(cè)的函數(shù)在SetHiliteHandler注冊(cè)的//函數(shù)之前執(zhí)行。我認(rèn)為ConstructHintsList()是創(chuàng)建動(dòng)態(tài)菜單的,時(shí)間關(guān)系,待分析。3高亮機(jī)制說(shuō)明:3.1使用流程每個(gè)窗口進(jìn)入后基本都有類(lèi)似下面的一段程序:。。。。。。EntryNewScreen(EM_DEBUG_INFO_SCR,NULL,EntryEMDebugInfo,NULL);guiBuffer=GetCurrGuiBuffer(EM_DEBUG_INFO_SCR);nItems=GetNumOfChild(EM_DEBUG_INFO_MENUID);GetSequenceStringIds(EM_DEBUG_INFO_MENUID,ItemList);SetParentHandler(EM_DEBUG_INFO_MENUID);RegisterHighlightHandler(ExecuteCurrHiliteHandler);ShowCategory52Screen(。。。)SetRightSoftkeyFunction(GoBackHistory,KEY_EVENT_UP);。。。。。。3.2分析這是窗口建立過(guò)程的一個(gè)通用處理結(jié)構(gòu),這里簡(jiǎn)單說(shuō)明一下,每個(gè)函數(shù)的具體實(shí)現(xiàn)和功能請(qǐng)閱讀代碼。EntryNewScreen初始化建立一個(gè)窗口需要的變量和過(guò)程,并退出上一個(gè)窗口,清除按鍵處理函數(shù)等;SetParentHandler很重要,設(shè)置當(dāng)前父窗口全局變量的MENUID,用來(lái)定位到當(dāng)前是在哪一個(gè)窗口,后面依據(jù)他來(lái)在菜單樹(shù)中查找到高亮的菜單項(xiàng)的MENUID,找到菜單項(xiàng)的MENUID后,通過(guò)mmi_frm_get_hilite_hdlr(U16menu_id)可以找到菜單項(xiàng)對(duì)應(yīng)的高亮函數(shù);RegisterHighlightHandler把ExecuteCurrHiliteHandler注冊(cè)成一個(gè)通用的高亮處理函數(shù),我們只要告訴ExecuteCurrHiliteHandler當(dāng)前高亮的菜單項(xiàng)的MENUID,它就能找到執(zhí)行函數(shù)并開(kāi)始執(zhí)行了。到這里就應(yīng)該已經(jīng)基本明白了高亮機(jī)制了,弄明白了其實(shí)也很簡(jiǎn)單的^_^;ShowCategory52Screen()只是一個(gè)窗口界面繪制函數(shù),和事件處理邏輯沒(méi)有關(guān)系。SetRightSoftkeyFunction(GoBackHistory,KEY_EVENT_UP)等函數(shù)設(shè)置這個(gè)窗口要響應(yīng)哪些按鍵事件,并設(shè)置好相應(yīng)的處理函數(shù)。3.3高亮函數(shù)觸發(fā)過(guò)程RegisterHighlightHandler把ExecuteCurrHiliteHandler注冊(cè)成一個(gè)通用的高亮處理函數(shù),實(shí)際上是給MMI_list_highlight_handler函數(shù)指針賦值。觸發(fā)則需要調(diào)用MMI_list_highlight_handler。由于MTK平臺(tái)支持各種菜單形式,比如純文本的菜單、帶CHECKBOX的、帶RADIO的、帶一個(gè)圖片的、帶兩個(gè)圖片的、兩行的。我們現(xiàn)在只對(duì)一種標(biāo)準(zhǔn)菜單進(jìn)行分析,其他形式的分析方法相同。standard_list_highlight_handler(S32item_index)里會(huì)執(zhí)行注冊(cè)的高亮處理函數(shù)MMI_list_highlight_handler,而standard_list_highlight_handler本身又是一個(gè)注冊(cè)函數(shù),在wgui_fixed_list_create_text_menu()里會(huì)被注冊(cè)到MMI_fixed_list_menu.item_highlighted,MMI_fixed_list_menu是菜單組件的數(shù)據(jù)結(jié)構(gòu),包含有菜單組件從顯示到功能處理函數(shù)的所有數(shù)據(jù),具體每個(gè)組件怎么被顯示,怎么響應(yīng)功能按鍵就不在這里討論了,后續(xù)我可能會(huì)寫(xiě)出文檔,有興趣的同學(xué)自己看代碼,效果會(huì)更好。這里簡(jiǎn)單說(shuō)一下,MMI_fixed_list_menu.item_highlighted在這個(gè)組件里,會(huì)被gui_fixed_list_menu_switch_highlighted_item()函數(shù)來(lái)執(zhí)行,而gui_fixed_list_menu_switch_highlighted_item()則在上下按鍵執(zhí)行的時(shí)候被執(zhí)行,比響應(yīng)上按鍵的函數(shù)是voidfixed_list_goto_previous_item(void),它調(diào)用voidgui_fixed_list_menu_goto_previous_item(fixed_list_menu*m),而voidgui_fixed_list_menu_goto_previous_item(fixed_list_menu*m)則調(diào)用gui_fixed_list_menu_switch_highlighted_item(),整個(gè)觸發(fā)過(guò)程就完成了。關(guān)于上下按鍵的注冊(cè),則在wgui_fixed_list_create_text_menu()里有:if(flag&WGUI_LIST_MENU_DISABLE_VOL_KEY)register_fixed_list_keys_ex();elseregister_fixed_list_keys();來(lái)注冊(cè)按鍵事件處理函數(shù),其實(shí)現(xiàn)過(guò)程很簡(jiǎn)單:voidregister_fixed_list_keys(void){/**//*LocalVariables*//**//**//*CodeBody*//**/SetKeyHandler(fixed_list_goto_previous_item,KEY_UP_ARROW,KEY_EVENT_DOWN);SetKeyHandler(fixed_list_goto_next_item,KEY_DOWN_ARROW,KEY_EVENT_DOWN);SetKeyHandler(fixed_list_goto_previous_item,KEY_VOL_UP,KEY_EVENT_DOWN);SetKeyHandler(fixed_list_goto_next_item,KEY_VOL_DOWN,KEY_EVENT_DOWN);}關(guān)于如何實(shí)現(xiàn)按鍵事件的響應(yīng)、按鍵的處理邏輯,又是一個(gè)專(zhuān)題了。大致包括鍵盤(pán)中斷、去抖、鍵盤(pán)映射、檢測(cè)、進(jìn)程通信、應(yīng)用部分按鍵處理機(jī)制等,有機(jī)會(huì)再寫(xiě)出文檔。4相關(guān)知識(shí)點(diǎn)說(shuō)明:4.1初始化相關(guān)高亮的一些全局變量會(huì)在InitEvents()里進(jìn)行初始化,在event.c文件里。這個(gè)函數(shù)在開(kāi)機(jī)過(guò)程中的一個(gè)調(diào)用棧關(guān)系如下:InitEvents();InitEventHandlersBeforePowerOn();voidMMI_task(oslEntryType*entry_param)InitEvents();還會(huì)在InitFramework()中被調(diào)用,而InitFramework()會(huì)由于開(kāi)機(jī)的狀態(tài)不同,如USB開(kāi)機(jī)、鬧鐘開(kāi)機(jī)等,調(diào)用流程也不盡相同。具體的可參見(jiàn)我的另一篇應(yīng)用開(kāi)機(jī)流程的文檔。4.2菜單結(jié)構(gòu)及查找4.2.1菜單數(shù)數(shù)組示意constCUSTOM_MENUmtk_nCustMenus[]={{1,0,18,0,16,2,10933,11062,(U16*)nOrderMenuItem_0},{2,0,3,1,0,1,26218,26085,(U16*)nOrderMenuItem_1},{3,2,0,1,0,1,555,0,(U16*)0},{4,2,0,1,0,1,552,0,(U16*)0},{5,2,0,1,0,1,26173,0,(U16*)0},{0,0,0,0,0,0,0,0,(U16*)0},{0,0,0,0,0,0,0,0,(U16*)0},{0,0,0,0,0,0,0,0,(U16*)0},{0,0,0,0,0,0,0,0,(U16*)0},{0,0,0,0,0,0,0,0,(U16*)0},{0,0,0,0,0,0,0,0,(U16*)0},。。。。。。。。}CUSTOM_MENUnCustMenus[MAX_MENU_ITEMS];4.2.2通過(guò)父窗口MENUID及高亮INDEX找到高亮窗口MENUIDU16GetSeqItemId_Ext(U16parent_item_id,U16index){/**//*LocalVariables*//**/U8i=0,idx=0;U16item_id=0;U8child_count=(U8)nCustMenus[parent_item_id-1].nNumofMenuItem;/**//*CodeBody*//**/#ifdefDEVAPP_RESOURCEif(parent_item_id>=MENU_ID_DEVAPP_START){returnDevAppGetSeqItemId_Ext(parent_item_id,index);}#endiffor(i=0;i<child_count;i++){item_id=nCustMenus[parent_item_id-1].nOrderMenuItemId[i];if(!mmi_frm_test_menu_item_hide(item_id))/*theitemisnothidden*/{if(idx==index){break;}else{idx++;}}}MMI_TRACE(MMI_FW_TRC_G2_GUI,MMI_RESGEN_ALL_MENU_HIDE,parent_item_id);returnitem_id;}4.2.3通過(guò)高亮窗口MENUID找到對(duì)應(yīng)的高亮函數(shù)FuncPtrmmi_frm_get_hilite_hdlr(U16menu_id){/**//*LocalVariables*//**/U32index;/**//*CodeBody*//**//*Firstlysearchthedynamictable*/if(mmi_frm_binary_search((U32)menu_id,(mmi_frm_pair_data_struct*)mmi_frm_int_hilite_hdlr_table,(U32)mmi_frm_int_hilite_hdlr_count,&index)){returnmmi_frm_int_hilite_hdlr_table[index].hilite_hdlr;}/*Andthensearchtheconstanttable.Theconstanttableisgenerantedbyresgen.*/elseif(mmi_frm_binary_search((U32)menu_id,(mmi_frm_pair_data_struct*)mmi_frm_const_hilite_hdlr_table,(U32)ARRAY_COUNT(mmi_frm_const_hilite_hdlr_table),&index)){returnmmi_frm_const_hilite_hdlr_table[index].hilite_hdlr;}else{returnNULL;}}3MTK內(nèi)存管理1內(nèi)存管理。平臺(tái)不提供動(dòng)態(tài)分配內(nèi)存的方式;應(yīng)用程序需要使用動(dòng)態(tài)分配內(nèi)存時(shí),可以采用以下幾種方式:與系統(tǒng)其他模塊共享內(nèi)存,典型的是使用MED模塊的內(nèi)存;定義一個(gè)靜態(tài)數(shù)組,交給系統(tǒng)adm托管,然后調(diào)用kal_adm_alloc、kal_adm_free等內(nèi)存操作函數(shù)實(shí)現(xiàn)動(dòng)態(tài)內(nèi)存分配;定義一個(gè)靜態(tài)數(shù)組,應(yīng)用自己實(shí)現(xiàn)基于此數(shù)組的分配和管理,也就是實(shí)現(xiàn)自己的內(nèi)存管理模塊。2內(nèi)存分配機(jī)制在MTK的資料中,介紹了它的內(nèi)存管理機(jī)制,有3種:ADM、Controlbuffer、SystemMemory。后兩個(gè)是系統(tǒng)使用的,與上層應(yīng)用無(wú)關(guān)。但是我對(duì)kal_system_alloc也做了初步分析。sys_mem_ptr,其估計(jì)應(yīng)該指向的是System_Mem_Pool,debug_mem_ptr,其估計(jì)應(yīng)該指向的是debug_Mem_Pool。經(jīng)過(guò)初步分析,kal_system_alloc就是從System_Mem_Pool做簡(jiǎn)單的加法操作,sys_mem_left_size就是System_Mem_Pool還剩下多少。kal_system_alloc從sys_mem_ptr開(kāi)始來(lái)計(jì)算要取的內(nèi)存。ctrl_buf是通過(guò)kal_system_alloc的內(nèi)存,然后再通過(guò)NU_Create_Partition_Pool創(chuàng)建POOL。系統(tǒng)的一些taskstack.等也都是通過(guò)kal_system_alloc來(lái)分配的。也就是說(shuō),Controlbuffer、SystemMemory用的都是System_Mem_Pool的空間。而System_Mem_Pool可以查到,是在custom_configmem函數(shù)中配置。ADM就完全沒(méi)有使用操作系統(tǒng)提供的內(nèi)存管理算法,是平臺(tái)自創(chuàng)了一套。開(kāi)發(fā)者,可以自己開(kāi)辟一個(gè)POOL,自己在這個(gè)池用ADM提供的內(nèi)存管理API完成內(nèi)存的動(dòng)態(tài)管理。具體的分配算法,就沒(méi)有再細(xì)看,跟一些通用的內(nèi)存分配算法應(yīng)該一致。但是在以前調(diào)試一個(gè)問(wèn)題的時(shí)候,應(yīng)該是可以斷定,ADM在每一個(gè)allocnode前后都加了GAP調(diào)試區(qū),來(lái)判斷是否被overwrite。至于系統(tǒng)中,到底是用了多少塊內(nèi)存用于ADM,各塊內(nèi)存又是讓哪些應(yīng)用在共享,開(kāi)發(fā)者可能更清楚。在系統(tǒng)中是否建立了對(duì)內(nèi)存動(dòng)態(tài)分配的監(jiān)控機(jī)制,比如查詢內(nèi)存泄漏、動(dòng)態(tài)內(nèi)存使用效率等等。3少于2K使用get_ctrl_buffer。大于2K使用admget_ctrl_buffer是在系統(tǒng)定義的一塊區(qū)域申請(qǐng)空間。這段空間被分為好多塊均等大小。好像有以下幾種方式:2個(gè)1K*24個(gè)0.5K*46個(gè)0.25K*8申請(qǐng)的話,按首適應(yīng)算法。這就是你所說(shuō)的小塊內(nèi)存管理。adm主要是你自己定義的一塊全局?jǐn)?shù)組比如400K.你可以使用它的adm相關(guān)函數(shù)去動(dòng)態(tài)申請(qǐng)釋放這400K大小的區(qū)域,維護(hù)也靠你自己。4任務(wù)管理任務(wù)管理。系統(tǒng)任務(wù)采用靜態(tài)創(chuàng)建方式,靜態(tài)配置任務(wù)優(yōu)先級(jí)、棧大小、任務(wù)全局唯一ID等;不提供動(dòng)態(tài)創(chuàng)建Task的方式;任務(wù)內(nèi)部以及任務(wù)之間的通信通過(guò)內(nèi)部事件隊(duì)列和外部事件隊(duì)列完成Application_Initialize中的mainp函數(shù),負(fù)責(zé)任務(wù)的創(chuàng)建。我們?cè)诖a中見(jiàn)不到任務(wù)創(chuàng)建的函數(shù),只需要維護(hù)任務(wù)初始化參數(shù)數(shù)據(jù)結(jié)構(gòu)。對(duì)于系統(tǒng)的那些task信息,都保存在sys_comp_config_tbl變量中,我們看不到。但是MTK提供給客戶的custom_comp_config_tbl,客戶是可以修改的,在這里用戶可以定義自己的task。關(guān)于任務(wù),需要關(guān)心數(shù)據(jù)結(jié)構(gòu)comptask_handler_struct。關(guān)于comptask_handler_struct成員的執(zhí)行順序,應(yīng)該是:comp_init_func在系統(tǒng)還未schedule即在Application_Initialize中完成,然后taskschedule后執(zhí)行comp_entry_p_cfg_func、comp_reset_func、comp_end_func我認(rèn)為無(wú)太多意義。5事件機(jī)制事件機(jī)制。平臺(tái)事件機(jī)制采用“注冊(cè)一回調(diào)”機(jī)制,把需要處理的各個(gè)按鍵、觸摸屏等通過(guò)系統(tǒng)函數(shù)注冊(cè),當(dāng)有事件發(fā)生時(shí)系統(tǒng)調(diào)用所注冊(cè)的監(jiān)聽(tīng)者。6定時(shí)器消息機(jī)制MTK定時(shí)器消息機(jī)制分析1.數(shù)據(jù)結(jié)構(gòu)(1).stack_timer_struct定時(shí)器類(lèi)型的信息結(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)建MMITask->設(shè)置MMITask初始化函數(shù)->在該函數(shù)中調(diào)用L4InitTimer(2).作用初始化定時(shí)器隊(duì)列并設(shè)置基本定時(shí)器1,23.發(fā)送定時(shí)器消息(1).步驟StartTimer->L4StartTimer(2).兩種類(lèi)型的定時(shí)器MTK中有兩種類(lèi)型的定時(shí)器a.NO_ALIGNMENT非隊(duì)列式的,即要求立即執(zhí)行的定時(shí)器,時(shí)間到了就自動(dòng)被reset.b.ALIGNMENT隊(duì)列式的,即可以通過(guò)隊(duì)列操作,有一定的延時(shí)容忍的定時(shí)器.y其基本執(zhí)行流程:執(zhí)行定時(shí)器-->超時(shí)?-->保存timerid,eventid--timerstop||noevent?>END;|YN|||

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論