uC OS ll 任務 任務控制塊 任務控制鍊錶

2021-07-22 02:15:23 字數 2024 閱讀 6028

第二章

2.1任務(又稱為執行緒)

組成部分:任務程式** 任務堆疊 任務控制塊

分類:使用者任務(解決應用問題)、系統任務(為應用程式提供服務)

uc/os-ll在管理任務時將每個任務作為乙個節點,鏈結成任務鍊錶,最多可對64個任務進行管理。

狀態:典型地、每個任務都是乙個無限的迴圈。每個任務都處在以下5種狀態之一的狀態下,這5種狀態是休眠態,就緒態、執行態、掛起態(等待某一事件發生)和被中斷態

任務**的一般結構:執行**是乙個無限迴圈結構,可以響應中斷,稱為超迴圈結構。

例1、  void mytask(void *pdata)

} 從**中我們可以看出,這是乙個完全符合c語言特點的函式,為了對中斷進行控制,我們用os_enter_critical( ),os_exit_critical( )這兩個巨集來控制,這兩個巨集之間的**不響應中斷,稱為臨界段。

使用者應用程式的一般結構:是乙個執行緒,不被主函式或者其他函式呼叫,主函式只負責建立和啟動他們,由作業系統來負責排程他們。

系統任務:分為空閒任務和統計任務

空閒任務:每個應用程式必須使用

在多工系統執行時,系統會在某個時間內無使用者任務可執行而處於空閒狀態,這時候uc/os-ii提供了空閒任務。

統計任務:應用程式根據實際需求來選擇使用

uc/os-ii提供的系統任務是統計任務ostaskstat(),這個統計任務每秒計算一次cpu在單位時間內被使用的時間,並把計算結果以百分比的形式存放在變數中便於訪問。

任務的優先權及優先級別

uc/os-ii將任務的優先順序分為64個優先級別,每個級別用數字表示,0表示任務的優先級別最高,數字越大則表示任務的優先級別越低。

使用者可以根據應用程式的需要,通過給最低優先順序別的常數os_lowest_prio賦值的方法說明應用程式中任務優先順序別的數目。固定地,系統總是把最低優先級別自動賦給空閒任務,如果應用程式中還使用了統計任務,系統就會把優先級別os_lowest_prio-1自動賦給統計任務。

2.2任務堆疊

定義:在儲存器中資料按照「後進先出」的原則組織的連續儲存空間。

任務棧堆的建立

例1:建立乙個任務,要求棧堆的長度為128位元組,任務優先級別為20,任務引數pdata的實參為mytaskagu。試寫出需要的**。

#define mytaskstkn  64       //定義棧堆的長度(128位元組)

os_stk mytaskstk[mytaskstk]; //定義乙個陣列來作為任務棧堆

void main(void)

在編寫該**時我們需要注意的是,棧堆的增長的方向是由系統所使用的處理器決定的。棧堆分為向下增長型和向上增長型,為了提高應用程式的可移植性,我們在編寫的時候需要把兩種情況都編寫出來,讓使用者通過選擇開關來選擇相應的**。

任務棧堆的初始化         

當cpu啟動執行乙個任務時,cpu的各個暫存器需要預設一些初始資料。在系統啟動任務的時候,cpu就會從任務棧堆裡面獲取這些初始資料。

uc/os-ii在建立任務函式中通過呼叫任務棧堆初始化函式ostaskstkinit()來完成任務棧堆初始化工作。

2.3任務控制塊及任務控制塊鍊錶

任務控制塊的定義:用來記錄任務的棧堆指標、任務的當前狀態、任務的優先級別等一些與任務管理有關的屬性的表叫做任務管理快(os_tcb)。

由定義我們知道,我們可以通過任務控制塊將任務**、任務棧堆進行關聯,使這三者成為乙個整體。系統可以通過任務控制塊來管理任務。

任務控制塊是乙個結構型別資料(個人理解跟c語言中結構體差不多),定義的

儲存在ram中。

任務控制塊鍊錶就是把所有任務的控制塊鏈結為兩條鍊錶,通過鍊錶管理各任務控制塊,進而再通過任務控制塊來對任務進行相關操作。

uc/os-ll用兩條鍊錶來管理任務控制塊。一條是空任務塊鍊錶(其中所有任務控制塊還沒有分配任務),另一條是任務塊鍊錶(其中所有任務控制塊已經分配任務)。空任務塊鍊錶是乙個呼叫初始化函式時建立的,任務塊鍊錶是呼叫函式建立任務時建立的。建立任務控制塊鍊錶時,從空任務控制塊鍊錶摘取乙個空任務控制塊鍊錶,然後填充屬性形成新的鍊錶。

C OS 任務控制塊

c os 是通過任務控制塊來管理任務的。任務控制塊是乙個基於鍊錶的資料結構,任務控制塊主要用於記錄任務的堆疊棧頂指標 指向下乙個任務控制塊的指標 任務等待的延遲時間 任務的當前狀態標誌與任務的優先級別等一些與任務管理有關的屬性。當任務的cpu使用權被剝奪時,c os 用任務控制塊來儲存該任務的狀態,...

ucos 任務控制塊及任務鍊錶

1 任務控制塊 首先看看ucos中任務控制塊的資料結構為 typedef struct os tcb os tcb 任務控制塊記錄了 任務的堆疊指標,任務當前的執行狀態,任務的優先順序等屬性。其中上面結構中任務狀態 int8u ostcbstat task status 的可取值範圍如下 2 任務控...

UC OS II任務管理(1)之任務控制塊

任務狀態 ucosii任務狀態一共有睡眠 就緒 阻塞 執行 以及中斷掛起五種狀態。睡眠態 dormant 任務已經在記憶體中裝入,但是還沒有進行任務執行的所需要的條件。就緒態 ready 是任務已經做好執行的一切準備了,就只差排程程式排程,將cpu讓給執行。阻塞態 waiting 當任務因為需要某些...