VxWorks支持各种任务间通信机制,主要有如下几种:
共享内存,主要是数据的共享;
信号量,用于基本的互斥和任务同步;
消息队列和管道,单CPU的消息传送;
Socket和远程过程调用,用于网络间任务消息传送;
二进制信号,用于异常处理。任务间的同步,互斥,通信。
一,共享内存:在多处理器之间的任务也可采用共享内存对象来实现任务间通信
任务间通信的最简单的方法是采用共享存储区,也即相关的各个任务分享属于它们的地址空间的同一内存区域。因为所有任务都存在于单一的线性地址空间,任务间共享数据。全局变量、线性队列、环形队列、链表、指针都可被运行在不同上下文的代码所指向。
不管是抢占式还是时间片轮转调度,任务间都是可调度的,既然有了在多任务中对共享数据的读与写,而原生共享的数据单元并不具备对自身的保护与控制,所以这种情况下也就势必存在数据的竞态与互斥,需要我们额外的对共享的数据进行保护。要避免任务间发生对数据竞争状态,第一种方式也是最直接的方式是使任务不可被切换,那么可以使用taskLock和taskUnlock:
void fooA()
{
taskLock();
/* critical region of code that cannot be interrupted by other tasks */
taskUnlock();
}
二,.事件:更轻量级的同步通信机制
事件可用于任务和中断服务程序ISR之间、任务和任务之间、任务和VxWorks资源之间进行通信。 任务用函数eventReceive()来接收它关心的事件,用eventSend(
本文详细介绍了VxWorks操作系统中进程间通信的多种方式,包括共享内存、信号量、消息队列、管道、Socket和远程过程调用、二进制信号。重点讨论了共享内存的使用、事件的轻量级同步、信号量的互斥和同步作用、消息队列和管道的异同,以及信号的异步处理特点和注意事项。
订阅专栏 解锁全文
4360

被折叠的 条评论
为什么被折叠?



