ucosii 任務的同步與通訊複習

2021-08-07 21:51:10 字數 1045 閱讀 1885



普通訊號量:

sem

互斥訊號量可能出現優先順序翻轉,低優先順序任務獲得訊號量還沒有釋放時發生任務切換,切換到高優先順序任務,高優先順序任務獲得不了訊號量而讓出

cpu,低優先順序任務繼續執行,從表象上看就是低優先順序任務在獲得訊號量後優先順序反而比高優先順序任務優先順序高,原因是:訊號量的約束高於優先順序的約束。

互斥型訊號量:

mutex

互斥型訊號量是當任務獲得訊號量時暫時將該任務的優先順序提公升到最高,那麼就不會發生任務切換,則這個任務可以一口氣把任務執行完畢再釋放訊號量,避免了來回無用功的任務切換。、

mbox

訊息郵箱是指定一塊記憶體,將記憶體位址傳送出去,別人從這個位址裡取出資料,一發一收,發了才能收,收了才能發。

訊息佇列:

q (用的最頻繁

)訊息佇列是多個郵箱的陣列,可以看做是乙個指標陣列。

建立乙個訊息佇列首先要定義乙個指標陣列,把各個訊息的資料緩衝區的首位址存入這個陣列 例如

char *s;

char *s1 = "s1";

char *s2 = "s2";

char *s3 = "s3";

#define n_messages 3

void *msggrop[n_messages];

os_event *str_q;

str_q = osqcreate(&msggrop[0],n_messages);

//傳送訊息

osqpost(str_q,s1);

osqpost(str_q,s2);

osqpost(str_q,s3);

//接收訊息

osqpend(str_q,s);

訊號量集:

flag

訊號量集是乙個任務在同時滿足幾個訊號的時候才執行,就是

>2

個任務之間的同步

總結:



ucosii之任務的同步與通訊

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

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

為了實現各個任務之間的合作和無衝突的執行,在各任務之間必須建立起一些制約制約關係,uc os ii有兩種制約關係,間接制約和直接制約。直接制約關係 於任務間的合作,間接制約關係源於對資源的共享,1.事件 uc os ii使用訊號量,郵箱 訊息郵箱 和訊息佇列這些中間環節來實現任務間的通訊,為了方便起...

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

事件 uc os中,通過使用訊號量 郵箱 訊息郵箱 和訊息佇列來實現任務之間的通訊,這些環節統稱為 事件 訊號量 訊號量通過ossemcreate函式來建立。引數為應用計數器,一般設定為1。請求任務時採用 ossempend 帶超時函式的請求和ossemaccept 無等待的函式,這兩個函式進入以後...