UC OS 學習 任務的同步與通訊

2021-06-16 07:04:23 字數 674 閱讀 2180

事件:uc/os中,通過使用訊號量、郵箱(訊息郵箱)和訊息佇列來實現任務之間的通訊,這些環節統稱為「事件」

訊號量:

訊號量通過ossemcreate函式來建立。引數為應用計數器,一般設定為1。

請求任務時採用 ossempend 帶超時函式的請求和ossemaccept 無等待的函式,這兩個函式進入以後,則會將訊號計數器減一。

傳送訊號量:採用ossempost函式,傳送訊號量。

訊號量的注意點:

1、訊號量的釋放將引發任務排程,但釋放訊號量時,如果有更好級別的任務處於就緒等待狀態,將切換人物。

2、訊號量的使用,實際上,是針對訊號量計數器加一減一來實現,減到0則其他的任務進行等待。因此,可以建立訊號量為0的任務,乙個任務處於等待狀態,另外乙個任務負責傳送訊號量,使其執行。

另外一種訊號量的使用採用傳統做法,建立乙個1的訊號量,使用時pend,用完post,進行互斥操作。

3、優先順序反轉。所謂任務優先順序反轉指,abc三個優先順序任務,a等待c,b搶占c,因此導致了b優先於a執行程式的問題。

4、採用互斥型osmutexcreate的方式,可以解決優先順序反轉的問題。

訊息郵箱和訊號量類似,但是區別是 1可以傳送訊息,第二可以以廣播方式傳送給所有不同等級的等待程序。

ucosii之任務的同步與通訊

為了把描述事件的資料結構統一起來,ucosii使用了事件控制塊ecb的資料結構來描述諸如訊號 量 郵箱 訊息佇列等事件。任務或中斷服務子程式可以通過事件控制塊ecb來向另外的任務發訊號。用於通訊的資料結構叫事件控制塊。對事件控制塊操作的函式有4個 為訊號量,郵箱或訊息佇列等 事件控制塊初始化函式os...

ucosii 任務的同步與通訊複習

普通訊號量 sem 互斥訊號量可能出現優先順序翻轉,低優先順序任務獲得訊號量還沒有釋放時發生任務切換,切換到高優先順序任務,高優先順序任務獲得不了訊號量而讓出 cpu,低優先順序任務繼續執行,從表象上看就是低優先順序任務在獲得訊號量後優先順序反而比高優先順序任務優先順序高,原因是 訊號量的約束高於優...

ucos 任務的掛起與恢復

看看任務掛起的函式 if os task suspend en 0 int8u ostasksuspend int8u prio if prio os lowest prio endif os enter critical if prio os prio self else if prio ostc...