UCOS-2 消息郵箱與隊列

 一個有趣的網絡解釋數組

信號量就是中央政府發給官人作一方大員的官印,有不少種官印可是不能一印多發,獲得官印者才能掌權魚肉一方百姓(任務獲得信號量才能運行),不然你就只要等官跑官。(固然官印也可隨時被政府收回(因腐敗違反紀律等問題被剝奪優先權而分給其餘人,固然之後表現好還可復出),或者嫌累或工資低本身封印辭官)安全

   郵箱,就好給比當差的下達的抄家、拆房、收監等紅頭文件,拿到啥樣的文件就幹啥。
   消息隊列,就是給任務發了一連串的郵件,官員(任務)拿到這一大摞文件,能夠從底部或者頂部(LIFO or FIFO)一個一個拆開處理。
網絡

信號量:主要負責管理.OSEventCnt域,管理信號量計數。單值信號量是對系統管理的(遵照規則)某種有限特定資源進行互斥申請享用(有時間限制,不能長期霸佔),對於已被佔用的要麼等待或特權佔用(優先級高,但必須系統管理員許可,不可直接佔用)。多值信號量比如十字樓口的交通員手勢信號(或信號燈),每臺車雖然不佔用其它車道資源,但要想經過必須聽同一個信號的安排。優化

三種常見的信號量(VXWOKRS):spa

二進制(位標誌):可實現任務間通信的互斥上鎖和同步(如共享的內存緩衝區域或IO資源),常在中斷系統中使用,指針

互斥信號量:爲了解決內在的互斥問題如優先級繼承、刪除安全和遞歸等狀況而最優化的特殊的二進制信號量對象

互斥信號量與二進制不一樣點在於:繼承

①定義一個互斥信號量時,其已經初始化完畢爲可用,它僅用於互斥;遞歸

②僅能由取(semTake ())它的任務釋放,即由同一個任務申請而後使用完畢後釋放;隊列

③由於semTake和semGive是成對出現的,所以不能在ISR 中釋放(semGive ())。

計數式信號量:每次釋放,計數器加一,每次獲取,計數器減一,當信號量減到0 時,試圖獲取該信號量的任務被阻塞,從而保持對信號量釋放次數的跟蹤。

郵箱與消息隊列的異同:

相同點:都基於事件控制塊,用於進行任務間的通信和同步,收發的對象包括定向和非定向(可指定接收對象或共享的其它任務),具體操做方式包括阻塞式或非阻塞式(接收時僅檢查信息後就返回是非阻塞,確認對方接收到才返回是阻塞;發送等對方接收後才返回是阻塞;無論對方接收就返回是非阻塞式),基本操做包括建立 發 查詢(MSMboxAccept() 檢查消息,返回;OSMboxQuery()查詢狀態) 接收 刪除。

區別:消息隊列在OS_EVENT結構基礎之上添加了一循環隊列,能夠同時容納多個消息,而郵箱只能容納一個。所以,能夠將消息隊列看做同時接收多條消息的郵箱。採用了循環緩衝方法。將二維數組在邏輯上鍊接成首尾相接的環,提供了讀定指針,有效提供了讀寫的效率及便利

 

郵箱:負責管理.OSEventPtr域,管理單個消息的發帝與接收。它是一個指針型變量。能夠向一個任務或一箇中斷服務子程序發送一則消息(一個指針),也能夠看成只取2個值的信號量來用

相關文章
相關標籤/搜索