在MTK平臺(tái)下如何去創(chuàng)建自己的任務(wù)_第1頁(yè)
在MTK平臺(tái)下如何去創(chuàng)建自己的任務(wù)_第2頁(yè)
在MTK平臺(tái)下如何去創(chuàng)建自己的任務(wù)_第3頁(yè)
在MTK平臺(tái)下如何去創(chuàng)建自己的任務(wù)_第4頁(yè)
在MTK平臺(tái)下如何去創(chuàng)建自己的任務(wù)_第5頁(yè)
已閱讀5頁(yè),還剩1頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

在MTK平臺(tái)下如何去創(chuàng)建自己的任務(wù)分類(lèi):MTK學(xué)習(xí)資料2012-04-0217:36132人閱讀評(píng)論(0)\o"收藏"收藏\o"舉報(bào)"舉報(bào)MTK平臺(tái)是非常優(yōu)秀的一個(gè)平臺(tái),曾經(jīng)的山寨機(jī)之父,下面我將介紹下在MTK平臺(tái)下如何去創(chuàng)建自己的任務(wù)。

一、基礎(chǔ)知識(shí)

在學(xué)習(xí)如何創(chuàng)建任務(wù)之前,我們需要了解一些基本概念,以及一些和任務(wù)相關(guān)的數(shù)據(jù)結(jié)構(gòu),了解了這些之后,我們就能更好的理解如何去創(chuàng)建任務(wù)了。MTK中關(guān)于任務(wù)的概念有兩個(gè),一個(gè)是TASK,另外一個(gè)則是MODULE,這兩個(gè)有什么區(qū)別呢,task是操作系統(tǒng)層面的概念,MTK使用的是nucleusplus實(shí)時(shí)操作系統(tǒng),其任務(wù)即TASK可以理解為一個(gè)線程,而一個(gè)TASK下面可以有很多的MODULE,MODULE是軟件平臺(tái)設(shè)計(jì)者因?yàn)槟撤N需要而設(shè)計(jì)的。TASK是一個(gè)執(zhí)行單元,MODULE主要是用于傳遞消息,在MTK中,消息傳遞是以MODULE為單位src_mod->des_mod,而不是以TASK為單位。MTK并不支持動(dòng)態(tài)的創(chuàng)建任務(wù),所以任務(wù)的創(chuàng)建是靜態(tài)的,需要事先定義好。而且任務(wù)的創(chuàng)建函數(shù)對(duì)程序開(kāi)發(fā)人員來(lái)說(shuō)是不可見(jiàn)的,MTK提供了幾張數(shù)據(jù)表,讓開(kāi)發(fā)人員來(lái)裝填,裝填好這幾張表之后,系統(tǒng)就會(huì)自動(dòng)創(chuàng)建我們想要?jiǎng)?chuàng)建的任務(wù)了。cunstomer_config.h文件中的枚舉類(lèi)型數(shù)據(jù)結(jié)構(gòu)custom_task_indx_type、custom_module_type,前面一個(gè)枚舉類(lèi)型是用來(lái)定義任務(wù)索引的,后面的一個(gè)枚舉類(lèi)型是用來(lái)定義MOD索引的,開(kāi)發(fā)人員新定義的任務(wù)時(shí),需要在這個(gè)地方添加新的索引。另外一個(gè)文件就是customer_config.c文件中的custom_task_index_type類(lèi)型的變量,custom_mod_task_g變量的裝填,這一步的作用主要就是將一個(gè)MOD和一個(gè)任務(wù)關(guān)聯(lián)起來(lái),即將MOD掛載到TASK上面。

MTK創(chuàng)建TASK的基本結(jié)構(gòu)體:

typedefstruct

{

kal_char*comp_name_ptr;-----任務(wù)的名稱(chēng)

kal_char*comp_qname_ptr;-----任務(wù)所屬隊(duì)列的名稱(chēng)

kal_uint32comp_priority;-----任務(wù)的優(yōu)先級(jí),0~255

kal_uint16comp_stack_size;-----任務(wù)堆棧的大小

kal_uint8comp_ext_qsize;-----外部消息隊(duì)列的大小

kal_uint8comp_int_qsize;-----內(nèi)部消息隊(duì)列的大小

kal_create_func_ptrcomp_create_func;-----task創(chuàng)建函數(shù)

kal_boolcomp_internal_ram_stack;-----是否使用internal_ram_stack

}comptask_info_struct;

comp_internal_ram_stack相對(duì)速度要快,但是數(shù)量有限,一般自己創(chuàng)建的任務(wù)不要去使用,容易引起問(wèn)題。

typedefstruct

{

kal_task_func_ptrcomp_entry_func;----task的入口函數(shù)

task_init_func_ptrcomp_init_func;----task的初始化函數(shù)

task_cfg_func_ptrcomp_cfg_func;----task的配置函數(shù)

task_reset_func_ptrcomp_reset_func;----task的重置函數(shù)

task_end_func_ptrcomp_end_func;----task的終止函數(shù)

}comptask_handler_struct;

task的入口函數(shù)是必須的,這個(gè)函數(shù)告訴系統(tǒng),初始化完相應(yīng)的task控制塊后,就要進(jìn)入該函數(shù)來(lái)運(yùn)行。

task的初始化函數(shù)是在進(jìn)入task入口函數(shù)之前被調(diào)用,用來(lái)初始化可能需要的資源,可選。task終止函數(shù)是,當(dāng)task結(jié)束是要調(diào)用,用來(lái)釋放資源,可選。

二、任務(wù)的創(chuàng)建過(guò)程

有了上面的基礎(chǔ)知識(shí),再創(chuàng)建MTK的任務(wù)時(shí),理解起來(lái)就容易多了,創(chuàng)建任務(wù)主要分為以下的幾個(gè)

步驟:

第一步:增加一個(gè)taskindex到custom_config.h中的枚舉類(lèi)型custom_task_indx_type中。

第二步:增加一個(gè)modeindex到custom_config.h中的枚舉類(lèi)型custom_module_type中。

第三步:把mod和task進(jìn)行關(guān)聯(lián),因?yàn)橐粋€(gè)task可以對(duì)應(yīng)多個(gè)mod,所以需要將mod掛載到

task上,掛載的方法是在custom_config.c中的

custom_mod_task_g[MAX_CUSTOM_MODS]數(shù)組中添加剛剛在第一步中所增加

的那個(gè)taskindex,這樣就能夠通過(guò)modeindex索引到相應(yīng)的taskindex,也就建

立了二者的對(duì)應(yīng)關(guān)系。

第四步:添加task基本信息到custom_config.c中的custom_comp_config_tbl中。

第五步:上面的各種數(shù)據(jù)信息裝填完畢之后,接下來(lái)就開(kāi)始編寫(xiě)自己的任務(wù)的實(shí)現(xiàn)的函數(shù)。

三、任務(wù)創(chuàng)建的舉例說(shuō)明

如果我們想創(chuàng)建一個(gè)任務(wù)名稱(chēng)為FD_TEST4,優(yōu)先級(jí)為219,堆棧大小為4096byte的任務(wù),采用

如下的方法來(lái)創(chuàng)建這個(gè)任務(wù):

第一步:添加TASKINDEX

typedefenum

{

INDX_CUSTOM1=RPS_CUSTOM_TASKS_BEGIN,

INDX_CUSTOM2,

#ifdef__FLAVOR_VENDOR_SDK__

INDX_VS,

#endif

//LXL

INDX_FD_TEST4,-----此處添加TASKINDEX

RPS_CUSTOM_TASKS_END

}custom_task_indx_type;

第二步:添加MODINDEX

typedefenum

{

MOD_CUSTOM1=MOD_CUSTOM_BEGIN,

MOD_CUSTOM2,

#ifdef__FLAVOR_VENDOR_SDK__

MOD_VS,

#endif

MOD_FD_TEST4,-----在此處添加MODEINDEX

MOD_CUSTOM_END

}custom_module_type;

第三步:將MOD掛載到TASK上

custom_task_indx_typecustom_mod_task_g[MAX_CUSTOM_MODS]=

{

INDX_CUSTOM1,

INDX_CUSTOM2,

#ifdef__FLAVOR_VENDOR_SDK__

INDX_VS,

#endif

INDX_FD_TEST4,

INDX_NIL

};

第四步:裝填創(chuàng)建人物的數(shù)據(jù)結(jié)構(gòu)

constcomptask_info_structcustom_comp_config_tbl[MAX_CUSTOM_TASKS]=

{

{"CUST1","CUST1Q",210,1024,10,0,

#ifdefCUSTOM1_EXIST

custom1_create,KAL_FALSE

#else

NULL,KAL_FALSE

#endif

},

{"CUST2","CUST2Q",211,1024,10,0,

#ifdefCUSTOM2_EXIST

custom2_create,KAL_FALSE

#else

NULL,KAL_FALSE

#endif

},

//此處添加TASK任務(wù)的數(shù)據(jù)結(jié)構(gòu)信息

{"FD_TEST4","FD_TEST4_Q",219,1024,30,0,fd_test4_create,KAL_FALSE}

};

第五步:編寫(xiě)任務(wù)的創(chuàng)建函數(shù)fd_test4_create

kal_boolfd_test4_create(comptask_handler_struct**handle)

{

staticconstcomptask_handler_structcustom_handler_info=

{

fd_test4_fun,

NULL,

NULL,

NULL,

NULL,

};

*handle=(compta

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論