UC OS II基礎知識之任務的同步與事件

2021-07-09 08:06:46 字數 1260 閱讀 4867

為了實現各個任務之間的合作和無衝突的執行,在各任務之間必須建立起一些制約制約關係,uc/os-ii有兩種制約關係,間接制約和直接制約。直接制約關係**於任務間的合作,間接制約關係源於對資源的共享,

1.事件

uc/os-ii使用訊號量,郵箱(訊息郵箱)和訊息佇列這些中間環節來實現任務間的通訊,為了方便起見,這些中間環節都統稱為事件。兩個任務通過事件進行通訊的示意圖如下所示。

任務1是傳送方,任務二是受信訪,作為發信方,任務1的責任就是把資訊傳送到事件上,這項操作叫做傳送事件,作為收信方,任務2的責任就是通過讀事件操作對事件進行查詢,如果有資訊,則讀取資訊,否則等待。讀事件操作叫做請求事件。uc/os-ii把傳送事件,請求事件和其他對事件的操作都定義為全域性函式,以供其他任務呼叫。

2.訊號量

訊號量是一類事件,使用訊號量的最初目的是為了給共享資源設立乙個標誌,該標誌表示共享資源被占用情況。對於乙個二值型訊號我們稱之為互斥型訊號量,對於計數式的訊號叫做訊號量。下圖表示的是兩個任務在使用互斥型訊號量進行通訊。

3.訊息郵箱

在多工作業系統中,常常需要在任務與任務之間傳遞乙個資料(這種資料叫做訊息)的方式來進行通訊,為了達到這個目的,可以再記憶體中建立乙個儲存空間作為該資料的緩衝區,如果把這個緩衝區叫做訊息緩衝區,那麼在任務傳遞資料(訊息)的乙個最簡單的方法就是傳遞訊息緩衝區的指標。因此用來傳遞訊息緩衝區指標的資料結構叫做訊息郵箱。下圖是兩個任務使用訊息郵箱進行通訊的示意圖。讀取訊息也叫訊息請求。

4.訊息佇列

可以傳遞多個訊息的資料結構叫做訊息佇列。下圖是兩個任務使用訊息佇列進行通訊的示意圖。

任務1向訊息佇列傳送訊息緩衝區指標陣列的指標,這個操作叫做傳送訊息佇列,任務2再從訊息佇列讀取訊息緩衝區指標陣列的指標,這個操作叫做請求訊息佇列。

UC OS基礎知識之任務的掛起和恢復

所謂掛起就是停止這個任務的執行。使用者可以通過呼叫系統提供的ostasksuspend 函式來掛起除空閒任務之外的其他任務,只能在其他任務中呼叫恢復函式ostaskresume 使其恢復為就緒狀態。任務在執行,就緒狀態和等待狀態之間的轉移關係如下圖 1.任務的掛起 掛起任務函式ostasksuspe...

003 FREERTOS任務基礎知識

一 任務狀態 freertos 中的任務永遠處於下面幾個狀態中的某乙個 執行態 當乙個任務正在執行時,那麼就說這個任務處於執行態,處於執行態的任務就是當前正在 使用處理器的任務。如果使用的是單核處理器的話那麼不管在任何時刻永遠都只有乙個任務處 於執行態。就緒態 處於就緒態的任務是那些已經準備就緒 這...

PHP之基礎知識

變數就是乙個盒子,有標籤的盒子。變數的8種型別 整型 浮點型 陣列 字串 布林 null 物件 資源 變數的檢測 isset檢測 注意變數型別為null,isset也返回false。變數型別的檢測 gettype is int is float is array is string 列印變數 ech...