VxWorks任務間通信

1.共享內存

雙向鏈表

1.png

環形緩衝

2.png

2.互斥

中斷鎖:作用域僅限於中斷內部。

優先級鎖:共享內存中,低優先級的任務不允許被打斷,優先級鎖就被使用。弊端:會完全禁止任務的調度。

3.信號量(一種指向semaphore結構的指針)

3.png

4.png

SEM_EVENTSEND_ERR_NOTIFY,釋放信號量出錯返回錯誤;SEM_DELETE_SAFE模式避免擁有信號量的任務被刪除;SEM_INVERSION_SAFE避免系統出現優先級反轉現象。

SEM_ID semId;//聲明信號量

semId = semXCreate(SEM_Q_PRIORITY,SEM_EMPTY);創建信號量

1)二值信號量

速度最快,只有唯一的任務可以獲取,一個任務釋放,一個任務才能獲取

2)互斥信號量

特殊二值信號量,只有擁有信號量的任務,才能使用semGIve釋放信號量;二值信號量和計數信號量,所有的任務都能釋放信號量;二值信號量被釋放之前只能有一個任務使用semTake獲取信號量;計數信號量被釋放前可以有多個任務獲取信號量,上限是計數值;在互斥信號量中,也只有一個任務獲取信號量,但是允許同一個任務聯繫多次獲取中一個信號量,當然獲取多少次就釋放多少次;二進制信號量和計數信號量均指出semFlush操作,用於向所有等待信號量的任務釋放信號量,使他們進入就緒態,信號量本身不變,但是,互斥信號量不支持semFlush。

3)計數信號量

和二值信號量類似,但是一個信號量可以被多個任務後去知道計數的限制。

4.消息隊列

創建一個隊列,一個任務發送,一個任務接收,隊列有大小,通過創建的隊列返回的句柄來發送和接收消息。

5.png

msgQCreate創建消息隊列,屬性:先進先出MSG_Q_FIFO、消息優先級MSG_Q_PRIORITY、發送時間通知MSG_Q_EVENTSEND_ERR_NOTIFY,前兩個可以和第三個屬性組合。返回值就是隊列句柄,也就是發送和接收函數操作隊列的參數。

msgQsend向隊列中發送消息,緊急程度參數:普通消息MSG_PRI_NORMAL和緊急消息MSG_PRI_URGENT。緊急就是將消息放到前端。

接收使用WAIT_FOREVER作爲超時參數,則消息隊列引起任務阻塞,知道隊列中有消息。

5.管道

支持select機制可以用於異步通信、支持全雙工

status = pipeDevCreate("/pipe/pipe0",Max_MsgNo,Max_MsgLen);

通過,open(),read(),write(),ioctl()來訪問管道。

6.socket

和Linux類似,之前已總結過

7.信號

6.png


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章