前面兩篇文章咱們看了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/內存