RTAI进程间各种通讯方式

10 篇文章 8 订阅

Semaphores
实时任务间通信和同步。
支持各种类型的信号量:CNT_SEM,BIN_SEM,RES_SEM以及所有这样信号量的orred组合。实现互斥信号量、读写锁、递归自旋锁、条件变量、障碍。
支持不同的排队策略:FIFO_Q,PRIO_Q.资源信号量无论什么情况下都会强制执行PRIO_Q策略。

Shared Memory
RTAI都有一个特定的模块,允许整体对称分配和共享内存inter/ intra-kernel /user space。以下任何一对之间共享内存都是可能的:RTAI本身的任务,Linux内核进程,Linux用户空间进程,LXRT任务。

FIFOs
RT FIFO是一种把一个实时任务和一个Linux的进程点对点连接的链路。它很像一个Unix管道。实施中虽然允许FIFO可以是双向的,但在实践中这基本上没什么意义。所以,实际使用中FIFO是单向的,方向由程序员指定。
用户空间进程把RT-FIFO作为字符设备对待,(/dev/rtf0 to /dev/rtf63)。进程打开一个FIFO做读写操作,然后使用read()或write()文件描述符来传输数据。
需要注意的是,在用户空间,你通过打开设备时获得的文件描述符来定位fifo,而在内核空间,你直接通过他们的次设备号定位。所以,你需要把从用户空间打开设备(/dev/rtfxx,…) 时获得的文件描述符与你将要在内核空间使用的xx整数 配对。
Rtai fifo只能在只使用实时中断处理程序的应用程序中使用,所以没有安装RTAI调度器。

Mailbox
任务间通讯,需要在创建时候指定初始大小。
可以发送任意大小数据通过任意大小的Mailbox缓冲。(自由、灵活)
允许多个发送或接收者,每个发送或接收者都会根据优先级依次获得他们请求的服务。

Typed Mailbox
消息广播:传递一个消息给所有等待同意TBX的任务。
紧急信息发送:这些消息不排队,但是会绕过所有其他已经在TBX里的消息在队列头插入。
在创建TBX时,可以设置在运行时能设置PRIORITY/ FIFO唤醒政策的功能。

Messages
任务间通讯,RTAI任务描述符作为消息持有人。发送者和接受者不同优先级时,会存在高优先级抢占现象。
RT_TASK* rt_send (RT_TASK* task, unsigned int msg);
如果接收方任务准备好了接受消息,rt_send立即返回,否则调用者阻塞。
RT_TASK* rt_receive (RT_TASK* task, unsigned int *msg);
如果task == 0,调用者接受来自任何任务的消息,如果有在等待的消息,rt_receive 立刻返回.。否则调用者将被阻塞。
注意:
由于所有的消息函数返回的是任务地址,0xffff可能看起来像是不恰当的返回值。然而在所有RTAI 运行的cpu上,0xffff都不是一个可以被RTAI任务使用的地址,所以它总是安全的。
如果希望不阻塞,可以使用rt_send_if和rt_receive_if。

POSIX Message Queue
添加进RTAI来支持标准POSIX Message Queue

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值