MTK平台學習 TASK的建立

2021-06-01 06:27:45 字數 2650 閱讀 2275

分類: mtk平台

mtk平台是非常優秀的乙個平台,曾經的山寨機之父,下面我將介紹下在mtk平台下如何去建立自己的任務。

一、基礎知識

在學習如何建立任務之前,我們需要了解一些基本概念,以及一些和任務相關的資料結構,了解了這些之後,我們就能更好的理解如何去建立任務了。mtk中關於任務的概念有兩個,乙個是task,另外乙個則是module,這兩個有什麼區別呢,task是作業系統層面的概念,mtk使用的是nucleus plus實時作業系統,其任務即task可以理解為乙個執行緒,而乙個task下面可以有很多的module,module是軟體平台設計者因為某種需要而設計的。task是乙個執行單元,module主要是用於傳遞訊息,在mtk中,訊息傳遞是以module為單位src_mod -> des_mod,而不是以task為單位。mtk並不支援動態的建立任務,所以任務的建立是靜態的,需要事先定義好。而且任務的建立函式對程式開發人員來說是不可見的,mtk提供了幾張資料表,讓開發人員來裝填,裝填好這幾張表之後,系統就會自動建立我們想要建立的任務了。cunstomer_config.h檔案中的列舉型別資料結構custom_task_indx_type、custom_module_type,前面乙個列舉型別是用來定義任務索引的,後面的乙個列舉型別是用來定義mod索引的,開發人員新定義的任務時,需要在這個地方新增新的索引。另外乙個檔案就是customer_config.c檔案中的custom_task_index_type型別的變數,custom_mod_task_g變數的裝填,這一步的作用主要就是將乙個mod和乙個任務關聯起來,即將mod掛載到task上面。

mtk建立task的基本結構體:

typedef struct

comptask_info_struct;

comp_internal_ram_stack相對速度要快,但是數量有限,一般自己建立的任務不要去使用,容易引起問題。

typedef struct

comptask_handler_struct;

task的入口函式是必須的,這個函式告訴系統,初始化完相應的task控制塊後,就要進入該函式來執行。

task的初始化函式是在進入task入口函式之前被呼叫,用來初始化可能需要的資源,可選。task終止函式是,當task結束是要呼叫,用來釋放資源,可選。

二、任務的建立過程

有了上面的基礎知識,再建立mtk的任務時,理解起來就容易多了,建立任務主要分為以下的幾個

步驟:第一步:增加乙個task  index到custom_config.h中的列舉型別custom_task_indx_type中。

第二步:增加乙個mode index到custom_config.h中的列舉型別custom_module_type中。

第三步:把mod和task進行關聯,因為乙個task可以對應多個mod,所以需要將mod掛載到

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

custom_mod_task_g[ max_custom_mods ]陣列中新增剛剛在第一步中所增加

的那個task index,這樣就能夠通過mode index索引到相應的task  index,也就建

立了二者的對應關係。

第四步:新增task基本資訊到custom_config.c中的custom_comp_config_tbl中。

第五步:上面的各種資料資訊裝填完畢之後,接下來就開始編寫自己的任務的實現的函式。

三、任務建立的舉例說明

如果我們想建立乙個任務名稱為fd_test4 ,優先順序為219,堆疊大小為4096 byte的任務,採用

如下的方法來建立這個任務:

第一步:新增task index

typedef enum

custom_task_indx_type;

第二步:新增mod index      

typedef enum

custom_module_type;

第三步:將mod掛載到task上

custom_task_indx_type custom_mod_task_g[ max_custom_mods ] =

;第四步:裝填建立人物的資料結構

const comptask_info_struct custom_comp_config_tbl[ max_custom_tasks ] =

,/* indx_custom2 */

,

//   此處新增task任務的資料結構資訊

};

第五步:編寫任務的建立函式fd_test4_create

kal_bool fd_test4_create(comptask_handler_struct **handle)

;*handle = (comptask_handler_struct *)&custom_handler_info;

return kal_true;

}

注意此函式的返回值,入口函式是固定的,因為這個函式是在任務建立時由系統自動

呼叫的,而我們想要實現的功能,則在函式fd_test4_fun中實現。

四、結束

上面就是mtk任務的建立過程,我也是剛開始接觸這個平台,還有很多不懂的地方,如果有說的

不對的地方,希望大家能夠指出來,一起進步。

MTK平台學習 對MTK按鍵事件的簡單分析

主要簡單分析一下左右軟體的事件,以左軟鍵事件為例 牽涉到的常用函式 void setkeyhandler funcptr funcptr,u16 keycode,u16 keytype void setleftsoftkeyfunction void f void mmi key event typ...

MTK平台學習 訊息通訊機制

一 基礎知識 使用訊息迴圈機制之前,我們先來認識幾個資料結構 typedef struct ilm struct ilm struct 其中各引數的含義如下 src mod id 請求服務的mod id dest mod id 接收服務的mod id sap id 服務請求標示,沒有可以填0 msg...

在MTK平台下如何去建立自己的任務

mtk平台是非常優秀的乙個平台,曾經的山寨機之父,下面我將介紹下在mtk平台下如何去建立自己的任務。一 基礎知識 在學習如何建立任務之前,我們需要了解一些基本概念,以及一些和任務相關的資料結構,了解了這些之後,我們就能更好的理解如何去建立任務了。mtk中關於任務的概念有兩個,乙個是task,另外乙個...