VxWorks任務間通訊

1.共享內存前端

雙向鏈表異步

1.png

環形緩衝socket

2.png

2.互斥ide

中斷鎖:做用域僅限於中斷內部。函數

優先級鎖:共享內存中,低優先級的任務不容許被打斷,優先級鎖就被使用。弊端:會徹底禁止任務的調度。指針

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

3.png

4.png

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

SEM_ID semId;//聲明信號量ip

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

相關文章
相關標籤/搜索