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

相关文章
相关标签/搜索