mtk內(nèi)存、任務(wù)管理和定時器消息機制 轉(zhuǎn)

mtk內(nèi)存、任務(wù)管理和定時器消息機制 轉(zhuǎn)

ID:12774541

大?。?2.79 KB

頁數(shù):6頁

時間:2018-07-19

mtk內(nèi)存、任務(wù)管理和定時器消息機制 轉(zhuǎn)_第1頁
mtk內(nèi)存、任務(wù)管理和定時器消息機制 轉(zhuǎn)_第2頁
mtk內(nèi)存、任務(wù)管理和定時器消息機制 轉(zhuǎn)_第3頁
mtk內(nèi)存、任務(wù)管理和定時器消息機制 轉(zhuǎn)_第4頁
mtk內(nèi)存、任務(wù)管理和定時器消息機制 轉(zhuǎn)_第5頁
資源描述:

《mtk內(nèi)存、任務(wù)管理和定時器消息機制 轉(zhuǎn)》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫

1、MTK內(nèi)存、任務(wù)管理和定時器消息機制轉(zhuǎn)MTK內(nèi)存、任務(wù)管理和定時器消息機制(轉(zhuǎn))2010年11月16日15:401內(nèi)存管理。平臺不提供動態(tài)分配內(nèi)存的方式;應(yīng)用程序需要使用動態(tài)分配內(nèi)存時,可以采用以下幾種方式:與系統(tǒng)其他模塊共享內(nèi)存,典型的是使用MED模塊的內(nèi)存;定義一個靜態(tài)數(shù)組,交給系統(tǒng)adm托管,然后調(diào)用kal_adm_alloc、kal_adm_free等內(nèi)存操作函數(shù)實現(xiàn)動態(tài)內(nèi)存分配;定義一個靜態(tài)數(shù)組,應(yīng)用自己實現(xiàn)基于此數(shù)組的分配和管理,也就是實現(xiàn)自己的內(nèi)存管理模塊。在MTK的資料中,介紹了它的內(nèi)存管理機制,有3種:ADM、Controlbuffer、S

2、ystemMemory。后兩個是系統(tǒng)使用的,與上層應(yīng)用無關(guān)。但是我對kal_system_alloc也做了初步分析。sys_mem_ptr,其估計應(yīng)該指向的是System_Mem_Pool,debug_mem_ptr,其估計應(yīng)該指向的是debug_Mem_Pool。經(jīng)過初步分析,kal_system_alloc就是從System_Mem_Pool做簡單的加法操作,sys_mem_left_size就是System_Mem_Pool還剩下多少。kal_system_alloc從sys_mem_ptr開始來計算要取的內(nèi)存。ctrl_buf是通過kal_syste

3、m_alloc的內(nèi)存,然后再通過NU_Create_Partition_Pool創(chuàng)建POOL。系統(tǒng)的一些taskstack.等也都是通過kal_system_alloc來分配的。也就是說,Controlbuffer、SystemMemory用的都是System_Mem_Pool的空間。而System_Mem_Pool可以查到,是在custom_configmem函數(shù)中配置。ADM就完全沒有使用操作系統(tǒng)提供的內(nèi)存管理算法,是平臺自創(chuàng)了一套。開發(fā)者,可以自己開辟一個POOL,自己在這個池用ADM提供的內(nèi)存管理API完成內(nèi)存的動態(tài)管理。具體的分配算法,就沒有再細看

4、,跟一些通用的內(nèi)存分配算法應(yīng)該一致。但是在以前調(diào)試一個問題的時候,應(yīng)該是可以斷定,ADM在每一個allocnode前后都加了GAP調(diào)試區(qū),來判斷是否被overwrite。至于系統(tǒng)中,到底是用了多少塊內(nèi)存用于ADM,各塊內(nèi)存又是讓哪些應(yīng)用在共享,開發(fā)者可能更清楚。在系統(tǒng)中是否建立了對內(nèi)存動態(tài)分配的監(jiān)控機制,比如查詢內(nèi)存泄漏、動態(tài)內(nèi)存使用效率等等。3少于2K使用get_ctrl_buffer。大于2K使用admget_ctrl_buffer是在系統(tǒng)定義的一塊區(qū)域申請空間。這段空間被分為好多塊均等大小。好像有以下幾種方式:2個1K*24個0.5K*46個0.25K

5、*8申請的話,按首適應(yīng)算法。這就是你所說的小塊內(nèi)存管理。adm主要是你自己定義的一塊全局數(shù)組比如400K.你可以使用它的adm相關(guān)函數(shù)去動態(tài)申請釋放這400K大小的區(qū)域,維護也靠你自己。2.任務(wù)管理任務(wù)管理。系統(tǒng)任務(wù)采用靜態(tài)創(chuàng)建方式,靜態(tài)配置任務(wù)優(yōu)先級、棧大小、任務(wù)全局唯一ID等;不提供動態(tài)創(chuàng)建Task的方式;任務(wù)內(nèi)部以及任務(wù)之間的通信通過內(nèi)部事件隊列和外部事件隊列完成Application_Initialize中的mainp函數(shù),負責任務(wù)的創(chuàng)建。我們在代碼中見不到任務(wù)創(chuàng)建的函數(shù),只需要維護任務(wù)初始化參數(shù)數(shù)據(jù)結(jié)構(gòu)。對于系統(tǒng)的那些task信息,都保存在sys_

6、comp_config_tbl變量中,我們看不到。但是MTK提供給客戶的custom_comp_config_tbl,客戶是可以修改的,在這里用戶可以定義自己的task。關(guān)于任務(wù),需要關(guān)心數(shù)據(jù)結(jié)構(gòu)comptask_handler_structcomptask_handler_struct成員的執(zhí)行順序,應(yīng)該是:comp_init_func在系統(tǒng)還未schedule即在Application_Initialize中完成,然后taskschedule后執(zhí)行comp_entry_func。comp_cfg_func、comp_reset_func、comp_end

7、_func我認為無太多意義。MTK6235Custom_config.h中對于添加一個Task如下注釋:Stepstoaddcomponenttask1.addcomponenttask'sindex(Pleaseaddbeforesystemservice)添加Task索引(在系統(tǒng)服務(wù)之前)2.addcomponenttask'smoduleiddefinition(Pleaseaddbeforesystemservice)添加Task模塊ID(在系統(tǒng)服務(wù)之前)3.addmoduletotasktransformationinsyscomp_config.

8、c在syscomp_config.c中添加Task轉(zhuǎn)

當前文檔最多預(yù)覽五頁,下載文檔查看全文

此文檔下載收益歸作者所有

當前文檔最多預(yù)覽五頁,下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動畫的文件,查看預(yù)覽時可能會顯示錯亂或異常,文件下載后無此問題,請放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫負責整理代發(fā)布。如果您對本文檔版權(quán)有爭議請及時聯(lián)系客服。
3. 下載前請仔細閱讀文檔內(nèi)容,確認文檔內(nèi)容符合您的需求后進行下載,若出現(xiàn)內(nèi)容與標題不符可向本站投訴處理。
4. 下載文檔時可能由于網(wǎng)絡(luò)波動等原因無法下載或下載錯誤,付費完成后未能成功下載的用戶請聯(lián)系客服處理。