日本a√视频在线,久久青青亚洲国产,亚洲一区欧美二区,免费g片在线观看网站

        <style id="k3y6c"><u id="k3y6c"></u></style>
        <s id="k3y6c"></s>
        <mark id="k3y6c"></mark>
          
          

          <mark id="k3y6c"></mark>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 一種嵌入式RPC的設計與實現(xiàn)

          一種嵌入式RPC的設計與實現(xiàn)

          作者: 時間:2011-06-10 來源:網(wǎng)絡 收藏

          過程調(diào)用的類型定義如下。_TYPE_SIMPLE_WRITEREAD是簡單的讀寫,輸入?yún)?shù)和輸出參數(shù)都在頭信息和過程的參數(shù)數(shù)據(jù)結構中。_TYPE_READ指返回結果保存在單獨的內(nèi)存。_TYPE_WRITE指寫信息保存在單獨的內(nèi)存。RPC_TYPE_WRITE_READ調(diào)用是需要內(nèi)存保存輸入數(shù)據(jù),返回時需要保存輸出的結果。
          f.JPG
          每個過程定義自己的輸入輸出參數(shù)結構。例如對獲取串口狀態(tài)GetCommState過程,建立RPC_GETCOMMSTATE結構。
          h.JPG
          由于各個編譯器對struct數(shù)據(jù)結構的成員的對齊不同。這樣同樣的struct在客戶端和服務器端的大小可能不同,同樣的成員在結構中的位置不同。為了確??蛻舳撕头掌鞫擞邢嗤膶R,我們采用字節(jié)對齊用#pragma pack(1)。
          3.2 Packet內(nèi)存布局
          開始依次是頭信息和參數(shù),其余部分根據(jù)特定的過程而不同。以RPC_TYPE_WRITE_READ類型的布局為例:頭信息,參數(shù),輸入內(nèi)存塊[1…N],輸出內(nèi)存塊[1…N]。其他的過程類型布局類似。
          3.3 服務器端
          3.3.1 網(wǎng)絡模塊
          RPC在單獨的任務中執(zhí)行。圖5為RPC任務流程圖。調(diào)用VxWorks的系統(tǒng)函數(shù)taskSpawn建立RPC任務。調(diào)用socket( )建立面向連接的SOCK_ STREAM套接字,bind將套接字與本地網(wǎng)絡地址和端口號捆綁,listen申明要在該端口偵聽客戶連接請求,accept阻塞等待請求的到來。

          本文引用地址:http://yuyingmama.com.cn/article/150615.htm

          h.JPG


          3.3.2 狀態(tài)機實現(xiàn)
          當accept后,進入服務器端狀態(tài)機。設置accept返回的socket為非阻塞狀態(tài)。在阻塞的socket上調(diào)用send時,如果沒有足夠的輸出緩沖區(qū),該調(diào)用將被阻塞。Recv也是一樣,要讀的數(shù)據(jù)沒有就緒時,調(diào)用者阻塞。服務器不知道每次要讀取的字節(jié)數(shù),所以阻塞的socket無法工作。
          分配2塊內(nèi)存:A和B。內(nèi)存A用來保存recv的內(nèi)容,內(nèi)存B用來保存客戶端發(fā)送的Packet內(nèi)容。因為服務器不知道客戶會發(fā)送多大的內(nèi)容過來,每次從內(nèi)存A拷貝到內(nèi)存B之前檢查內(nèi)存B的大小,如果內(nèi)存B剩余大小不夠則重新分配。
          在得到了整個Packet后,即GetComplatePacket后,根據(jù)dwCallID調(diào)用服務器的本地過程,待返回后將返回值和內(nèi)存打包發(fā)送給客戶端。
          3.4 客戶端實現(xiàn)
          客戶端的流程如圖6所示。在Windows下運行,首先調(diào)用WSAStartup,Windows根據(jù)請求的Socket版本來搜索相應的Socket庫,然后綁定找到的Socket庫到該應用程序中。然后初始化socket,連接到服務器,接著過程調(diào)用。比如過程調(diào)用1會進入圖4狀態(tài)機。狀態(tài)機和服務器端類似,只是首先參數(shù)打包,發(fā)送給服務器,返回后拆包并拷貝返回信息到內(nèi)存中。

          i.JPG



          4 結束語
          本文和實現(xiàn)的RPC可應用于白盒測試、跨平臺開發(fā)環(huán)境和開發(fā)客戶端軟件等。商用的IDE軟件都很昂貴,通過本RPC,測試人員就可用開源的環(huán)境如cygwin等開發(fā)白盒測試代碼。另外對于有大量操作界面的開發(fā),需要頻繁下載到開發(fā)板上驗證,本文RPC可應用于構建跨平臺的開發(fā)環(huán)境,直接在Windows上開發(fā)界面部分,最后下載到開發(fā)板上,從而大大提高開發(fā)效率。大多數(shù)的軟件都有相應的PC客戶端軟件,本文的實現(xiàn)也適用于開發(fā)PC客戶端軟件。

          linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)

          上一頁 1 2 3 下一頁

          評論


          相關推薦

          技術專區(qū)

          關閉