對uc/OS中的任務-----學習
uc/OS中的任務就是個函式,而從任務的儲存結構上看,它由三部分組成:任務程式程式碼,任務
堆疊和任務控制塊。其中任務控制塊是關聯任務程式碼的程式控制塊,它記錄了任務的各個屬性,任務堆疊用來儲存任務的工作環境。
用來指向程式碼的指標這裡是CPU程式計數器pc的副本(程式計數器總是指向待執行的指令地址)。
執行緒與程序:具有私有執行空間叫程序,而具有公共執行空間的叫執行緒,執行緒是程序的的一部分,執行緒不擁有系統資源,而程序擁有系統資源,為了降低CPU的消耗,所以引用的執行緒,執行緒是切換時不需要呼叫資源,系統消耗比較程序要小。
uc/OS中的任務有兩種任務:使用者任務和系統任務。由應用程式設計者編寫的任務叫做使用者任務,由系統提供的任務叫做系統任務。
系統任務:
空閒任務和統計任務,其中,空閒任務是每個應用程式必須使用的,而統計任務是應用程式可以根據實際需要來選擇使用。
l 空閒任務:
所謂的空閒任務就是在空閒的時候(沒有使用者任務)讓它又事可做,這個任務幾乎什麼都不做,只是在計數。
l 統計任務:
該任務是統計CPU的利用率,以便告知其他應用程式,讓他們合理分配任務。
任務的狀態:
1、 睡眠:任務只以程式碼的形式存在,沒交給作業系統管理,即沒有分配任務控制塊和任務 堆疊
2、 就緒:任務全副武裝,並在就緒表中登了記
3、 執行:獲得了cup的使用權
4、 等待(掛起):正在執行的任務,需要等待一個事件的發生在執行,cpu使用權被剝奪,自己處於等待狀態
5、 中斷服務:正在執行的任務一旦響應中斷申請就會終止執行而去執行中斷服務子程式(ISR),這時處於中斷服務狀態
任務的優先權及優先級別
l 為解決當多工需要執行而CPU只有一個時,執行那個任務就成了一個問題,嵌入式系統採用的是優先順序搶佔式原則。由於uc/os建立最多為64個任務,所以任務優先級別最多為64級,數字越小,級別越高。最高的優先級別為0.
任務堆疊
為了滿足任務的切換和響應中斷時儲存cpu暫存器中的內容及任務呼叫其他函式時的需要,每個任務都需要配備自己的堆疊。所有的任務控制塊都含一個指向堆疊的指標。
l 任務堆疊的建立
建立任務函式原型:
INT8U OSTaskCreate(
void (*task)(void*pd), //指向任務的指標
void*pdata, //傳遞給任務的引數
OS_STK *ptos, //任務堆疊棧頂的指標
INT8U prio //指定任務優先級別的引數
);
堆疊的增長方式會隨著系統所使用的處理器不同而不同。
l 任務堆疊的初始化
當啟動一個任務時,CPU的各個暫存器總是需要一些初始資料,如指向任務的指標,psw等。由於它們都是任務的私有資料,所以放在任務堆疊。應用程式啟動時先把CPU需要的初始資料從事先存放在堆疊中資料複製到CPU的各暫存器。
把任務初始資料存放到任務堆疊的工作叫做任務堆疊的初始化。該函式的原型為:
OS_STK *OSTaskStkInit(
void (*task)(void*pd),
void*pdata,
OS_STK *ptos,
INT16U opt
);
該函式由任務建立函式呼叫。