前面两篇文章咱们看了xddp在xenomai内核里涉及的数据结构、RTDM对于协议类实时设备的管理方式,以及实时端建立一个XDDP通道后(xddp必须由实时端来建立),实时端与非实时端是如何联系起来的,本文从linux端打开建立好的xddp通道开始,来详细看整个通信过程。
html
【原创】实时IPC概述
【原创】xenomai与普通linux进程之间通信XDDP(一)--实时端socket建立流程
【原创】xenomai与普通linux进程之间通信XDDP(二)--实时与非实时关联(bind流程) linux
前面两篇文章咱们看了xddp在xenomai内核里涉及的数据结构、RTDM对于协议类实时设备的管理方式,以及实时端建立一个XDDP通道后(xddp必须由实时端来建立),实时端与非实时端是如何联系起来的。数据结构
以上工做作好后,下面能够进行数据交互了,本文从linux端打开建立好的xddp通道开始,来详细看整个通信过程。socket
实时端建立xddp socket,经过bind指定socket使用的端口号,或者给socket设置一个label,端口号自动分配。实时与非实时经过socke使用的端口号来关联,在linux端,端口号即xnpip设备的次设备号。code
经过指定端口通信时,linux经过直接读写xnpipe设备(/dev/rtpN
,N为端口号)来通信。使用label时,因为实时端端口号为自动分配,因此只能linux端只能经过读写文件/proc/xenomai/registry/rtipc/xddp/%s
来通信,%s
为通信使用的label。htm
非实时向实时端发送数据:通信过程当中,因为xnpipe可看作一个全双工设备,有两个数据链表,命名以实时端为主,inq
表示接收数据报链表(NRT->RT),outq
为发送数据报链表(RT->NRT)。对于linux端,每次发送的数据都做为一个数据报节点插入到链表inq
尾,实时端读取时从链表头取数据,符合FIFO。blog
实时向非实时发送数据,分三种数据:进程
outq
尾。outq
头。liunx端读取时从链表头取数据,因此除MSG_OOB标识的数据外,符合FIFO。outq
),先积累到数据缓冲区,待缓冲区满或者发送的数据没有MSG_MORE时,将整个缓冲区做为一个大的数据包插入链表outq
尾。整个XDDP使用过程当中:ip
详细的过程见下文。
版权声明:本文为本文为博主原创文章,转载请注明出处。若有问题,欢迎指正。博客地址:https://www.cnblogs.com/wsg1100/内存