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.信号