VxWorks任務間通訊

2021-09-20 19:06:08 字數 1732 閱讀 4847

1.共享記憶體

雙向鍊錶

環形緩衝

2.互斥

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

優先順序鎖:共享記憶體中,低優先順序的任務不允許被打斷,優先順序鎖就被使用。弊端:會完全禁止任務的排程。

3.訊號量(一種指向semaphore結構的指標)

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.訊息佇列

建立乙個佇列,乙個任務傳送,乙個任務接收,佇列有大小,通過建立的佇列返回的控制代碼來傳送和接收訊息。

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.訊號

VxWorks系列 任務間同步與通訊之訊號量

訊號量是vxworks提供的最常用,最快速的一種任務間通訊機制。vxworks中訊號量有三種 二值訊號量,互斥訊號量,計數訊號量。下面一一介紹這三種訊號量的作用與區別。訊號量通常的作用就是是控制任務的同步與互斥,控制同步 任務1中等待訊號量x,當任務2中提供訊號量後觸發任務1繼續執行 void fo...

VxWorks系列 任務間同步與通訊之訊號量

訊號量是vxworks提供的最常用,最快速的一種任務間通訊機制。vxworks中訊號量有三種 二值訊號量,互斥訊號量,計數訊號量。下面一一介紹這三種訊號量的作用與區別。訊號量通常的作用就是是控制任務的同步與互斥,控制同步 任務1中等待訊號量x,當任務2中提供訊號量後觸發任務1繼續執行 void fo...

vxworks任務通訊之管道

管道 任務a寫入管道,任務b讀取 include include include include include include define task priority a 130 define task priority b 130 define stack size 225 int taski...