熟女人妻水多爽中文字幕,国产精品鲁鲁鲁,隔壁的少妇2做爰韩国电影,亚洲最大中文字幕无码网站

技術頻道

娓娓工業
您現在的位置: 中國傳動網 > 技術頻道 > 技術百科 > 嵌入式實時系統中跨平臺通信的實現

嵌入式實時系統中跨平臺通信的實現

時間:2007-07-25 14:49:00來源:shixiang

導語:?本文以套接字Socket 為基礎,提出并設計了一種跨平臺嵌入式實時系統的通信模型
摘 要: 本文以套接字Socket 為基礎,提出并設計了一種跨平臺嵌入式實時系統的通信模型,并根據這種模型給出了示范。 關鍵詞: 跨平臺;嵌入式實時系統;套接字 引言 當前嵌入式系統正以前所未有的速度發展,并廣泛應用到通信、軍事、航空、航天、工業控制等高精尖技術及實時性要求極高的領域中。在這些領域中,迫切需要一個能夠讓日益增多的嵌入式設備相互通信的解決方案。同時,由于嵌入式系統的專用性強,在不同領域的嵌入式設備往往使用不同的嵌入式實時操作系統。這樣就為構建一個統一的通信平臺帶來了困難。當前微軟公司正大力開發用于工業領域的Windows CE 嵌入式平臺,作為工業控制領域的領導廠商,泓格積極倡導和順應這一趨勢,經過兩年不懈地開發和測試,泓格于2003 年領先推出了基于Windows CE.NET 和RISC CPU 架構的嵌入式控制系統WinCon-8000 系列,并于2003 年10 月與微軟WEP 部門(Microsoft Windows Embedded Partner Program)正式建立了合作關系。這一充滿活力的產品一經推出,就獲得了國內各界專家的好評,并被浙江大學、華東理工大學等知名高校選作自動化等相關專業的試驗平臺。 本文介紹一個采用泓格科技(ICP DAS)的全系列產品實現不同平臺下的嵌入式系統的通信方案。 設計目標 靈巧性 完備的嵌入式系統大都具備嵌入式實時操作系統,絕大多數實時操作系統都帶有網絡協議棧,利用網絡協議就可以構建通信平臺。TCP/IP 協議簇是目前使用最廣泛的一種網絡通信協議。當前,基于TCP/IP 的流行應用,存在功能單一、消耗系統資源等問題。而嵌入式設備一般通信量不大,同時系統資源有限,不能支持大型的應用。所以,嵌入式設備間的通信應當實現簡單、可靈活增減。 實時性 實時系統要求系統能夠在規定的時間內對外部事件給予響應。但在不同應用中,通信的嵌入式設備間的物理距離不同,使用的通信方式也不盡相同。通信延遲是影響實時系統的主要因素之一。在近距離通信中,可以采用高速通信線路,但是在遠距離通信中,則通信線路的選擇余地較小。在低速通信線路中,為了提高系統的實時性能,嵌入式實時系統的通信需要設計成多線程多任務,確保每個通信請求都有單獨的線程來處理,這樣可以保證系統對通信的及時響應。 穩定性 嵌入式實時系統大都具備繁重的測量和運算任務。嵌入式實時系統同時運行大量任務,不能保證系統永不出現問題,但通信任務不能受嵌入式設備本身任務的影響。因此,在設計中,需要把通信任務和實際的檢測控制任務分離。用一個專門的任務處理通信事件,同時設立一個緩沖區保證通信數據能夠被及時保存。 通用性 嵌入式實時操作系統種類繁多,目前尚無一種操作系統在嵌入式領域占絕對優勢。嵌入式設備的跨平臺通信必須能夠適用于各種常見的實時操作系統,能將不同實時操作系統的嵌入式設備聯網。 實現方案 根據嵌入式實時系統不同平臺通信的特點,可以采用如下方案設計: 跨平臺通信 通信部分采用大多數實時操作系統都支持的TCP/IP 協議簇作為系統的基本協議。為了方便使用,采用基于TCP/IP 的套接字。套接字是一種仿照電話系統設計,并在UNIX 上得到成功應用的進程通信機制,它提供進程間通信的端點。通信之前,進程雙方都創建一個端點,服務器端綁定一個固定的端口,客戶端則可以隨機的申請一個端口??蛻艨梢酝ㄟ^網絡向服務器的端口發送連接請求,服務器端接收到請求后允許客戶端的連接。這樣,服務器端和客戶端就建立了一個雙向的通信通道。 套接字分為三種類型:流套接字、數據包套接字、原始套接字。流套接字可以提供可靠的、面向連接的通信流,有固定的發送和接收順序,采用TCP 和IP 協議。數據包套接字是一種無連接的數據服務,數據通過相互獨立的報文進行無序傳輸,使用UDP 和IP 協議,它允許對底層協議如IP 或ICMP 直接訪問。原始套接字雖然功能強大,但是使用較復雜,主要用于一些協議的開發和測試工作。 通信處理程序設計成多線程方式。一旦其它嵌入式設備發起連接就啟動一個線程或任務專門處理對外部嵌入式設備發送過來的數據,通過解析確定數據的類別并轉入相應的處理函數。處理函數的多少可以根據實際應用確定,這樣可以最大限度地利用有限的系統資源。 通信數據處理 利用命名管道或共享內存技術,建立一個介于嵌入式設備實際任務和通信處理任務間的緩沖區。 如果通信中嵌入式設備需要連續數據交換,可以使用管道技術。命名管道支持單向和雙向進程或任務間的通信。命名管道有兩種實現方式:字節模式和消息模式。在字節模式中,消息以一個連續的字節流的形式,在客戶機與服務器之間流動。這意味著,對進程雙方來說,在任何一個特定的時間段內,它們不能準確知道有多少字節從管道中讀入或者寫入管道。在消息模式中,客戶機和服務器則通過一系列不連續的數據單位,進行數據的收發。每次在管道上發出了一條消息后,它必須作為一條完整的消息讀入。因此,消息模式比較適合通信任務和實時任務的數據交換。 如果通信中嵌入式設備只要瞬時數據交換,則可以采用共享內存方式構造緩沖區。簡單說地共享內存就是被多個進程共享的內存。共享內存方式是進程間通信方法中最快的一種,它可以將信息直接映射到內存中,省去了許多中間步驟。利用共享內存方式實現進程通信,需要注意進程間的同步問題。如果通信量不大的話,最簡單的方法就是對進程雙方給予不同權限(讀或寫),這樣就可以省去復雜的同步機制。通信方案的結構框圖如圖1 所示,嵌入式設備間的通信流程如圖2 所示。 [align=center] 圖1 通信方案的結構框圖 圖2 嵌入式設備的通信流程[/align] 部分代碼示例 下面給出在兩個常見的嵌入式設備操作系統下通信的實現代碼: 主動通信方代碼 主動通信方選擇WinCE 為操作系統。WinCE 與Windows2000 都是使用WinSocket,因此編程方法基本相同。 #include "Winsock2.h" #include "Windows.h" WSADATA wsaData;//使用的WinSocket 版本 //使用的通信協議標志 struct protoent *ppe; //待通信Socket 的地址 struct sockaddr_in daddr; //讀寫數據長度 DWORD cbRead=0,cbWritten=0; BOOL fSuccess=false;//通信標志 //通信程序 DWORD HostConnect(void) { //確定使用WinSocket 的版本 WSAStartup(MAKEWORD (2,2),&wsaData ); //創建一個基于TCP 的套接字 ppe=getprotobyname("tcp"); SOCKETClientSocket=socket (PF_INET,SOCK_STREAM,ppe->p_proto); //連接一個套接字 //使用TCP 協議 daddr.sin_family=AF_INET; //設定待連接的端口 daddr.sin_port=htons(TargetPort); daddr.sin_addr.s_addr=inet_addr (TargetIPAddress);//設定待連接設備的IP 地址 //連接目的嵌入式設備 if(connect(ClientSocket,(struct sockaddr *)&daddr,sizeof(daddr))) {closesocket(ClientSocket);} else { //發送消息 ......//準備發送的數據 cbWritten=send(ClientSocket,SData,strlen(SD ata)),MSG_DONTROUTE); //接收消息 do { cbRead=recv(ClientSocket,RData,50,MSG_PEEK); if(cbRead>0) {fSuccess=true;} }while(!fSuccess); ...... //數據處理 //關閉Socket closesocket(ClientSocket) } return(0); } 被動通信方代碼 被動通信方選擇VxWorks 為操作系統。Linux 與VxWorks 都可以使用BSD Socket,因此編程方法基本相同。通信任務和實時任務的數據交換以管道方式為例。 #include "vxWorks.h" #include "sockLib.h" #include "inetLib.h" #include "taskLib.h" //本機Socket 地址 struct sockaddr_in serverAddr; //目標通信機Socket 地址 struct sockaddr_in clientAddr; int sFd; //監聽Socket 描述苻 int newFd; //被連接Socket 描述苻 int ix=0;//被連接的Socket 數目 //啟動管道函數 void SetupPipe(void) { pipeDrv();//管道驅動 //管道建立 pipeDevCreate(“\pipe\ mypipe”,20,40); } //主通信函數 void Server(void) { //使用TCP/IP 協議 serverAddr.sin_family = AF_INET; serverAddr.sin_len = sizeof (struct sockaddr_in); //本機提供通信的端口 serverAddr.sin_port = htons(HostPort); serverAddr.sin_addr.s_addr = htonl (HostIP);//本機IP 地址 //創建Socket sFd = socket (AF_INET, SOCK_STREAM, 0); //綁定Socket bind (sFd, (struct sockaddr *) &serverAddr, sockAddrSize); //監聽Socket listen (sFd, SERVER_MAX_CONNECTIONS); //等待通信事件發生 FOREVER { newFd = accept (sFd, (struct sockaddr *) &clientAddr,&sockAddrSize); sprintf (workName, "tTcpWork%d", ix++); taskSpawn(workName, NORMAL_PRIORITY, 0, NORMAL_STACK_SIZE,(FUNCPTR) tcpCommunicateTask, newFd,(int) 0, 0,0, 0, 0, 0, 0, 0, 0); } } //已連接的通信的處理函數 void tcpCommunicateTask(int sFd,) { do { //讀取數據 ReadBytes=recv(sFd,chRequest, sizeof(chRequest),MSG_PEEK); if(ReadBytes == 0) break; else RSuccess=true; GetAnswerToRequest(chRequest, chReply,&ReplyBytes);//數據處理 //返回數據 WriteBytes = send (sFd, chReply, ReplyBytes ,MSG_DONTROUTE); if ( WriteBytes!= ReplyBytes) break; else WSuccess=true; }while(!(RSuccess && WSuccess)); //關閉Socket close (sFd); } //處理數據函數 void GetAnswerToRequest(char * Request, char * Reply, int * ReplyBytes) { //打開管道(每個任務有不同的管道) int fd=open("\pipe\mypipe", O_RDWR,0); ......//相應的數據交換 } 結語 使用這種嵌入式實時系統的跨平臺通信方案,不但可以實現嵌入式設備異平臺的互聯互通,而且給系統靈活組織帶來方便。多任務的處理方式以及通信任務的分離大大提高了系統的實時性和穩定性。作者據此方案采用泓格科技(ICP DAS)的全系列產品包括PCI 和ISA 接口工業數據采集卡和嵌入式控制系統WinCon-8000 系列等產品建立的基于嵌入式設備的遠程數據采集系統運行穩定,取得了良好的效果,當然這以泓格科技在中國提供及時、到位的服務及技術支持和質量過硬的系列產品是分不開的。 參考文獻 1 VxWorks(r) 5.4 Programmer‘s Guide. Wind River Inc, 1999.6 2 Anthony Jones. Network Programming for Microsoft Windows. Microsoft Press,1999 3 李卓桓等. Linux 網絡編程. 北京:機械工業出版社. 2000.1 4 李朝青.PC 機及單片機數據通信技術.北京:北京航空航天出版社.2000 5 原嵩,林滸.通用串行總線的原理及實現. 小型微行計算機系統.1999(5) 6 張洪潤,藍清華.單片機應用技術教程. 北京:清華大學出版社.1997

標簽:

點贊

分享到:

上一篇:DSP和PBL3717A構成的步進電機...

下一篇:微能WIN-V63矢量控制變頻器在...

中國傳動網版權與免責聲明:凡本網注明[來源:中國傳動網]的所有文字、圖片、音視和視頻文件,版權均為中國傳動網(www.hysjfh.com)獨家所有。如需轉載請與0755-82949061聯系。任何媒體、網站或個人轉載使用時須注明來源“中國傳動網”,違反者本網將追究其法律責任。

本網轉載并注明其他來源的稿件,均來自互聯網或業內投稿人士,版權屬于原版權人。轉載請保留稿件來源及作者,禁止擅自篡改,違者自負版權法律責任。

相關資訊

網站簡介|會員服務|聯系方式|幫助信息|版權信息|網站地圖|友情鏈接|法律支持|意見反饋|sitemap

傳動網-工業自動化與智能制造的全媒體“互聯網+”創新服務平臺

網站客服服務咨詢采購咨詢媒體合作

Chuandong.com Copyright ?2005 - 2025 ,All Rights Reserved 深圳市奧美大唐廣告有限公司 版權所有
粵ICP備 14004826號 | 營業執照證書 | 不良信息舉報中心 | 粵公網安備 44030402000946號

主站蜘蛛池模板: 句容市| 永城市| 湟源县| 宜阳县| 宜城市| 衡东县| 太仆寺旗| 太湖县| 海伦市| 额济纳旗| 于都县| 容城县| 醴陵市| 磐安县| 娄烦县| 临邑县| 阿克苏市| 长武县| 微山县| 萨迦县| 远安县| 崇明县| 文安县| 邯郸县| 郴州市| 临夏市| 金乡县| 丰台区| 梨树县| 增城市| 昆山市| 蒲江县| 宜昌市| 内乡县| 甘孜县| 尖扎县| 怀远县| 乌兰浩特市| 万全县| 台北市| 西盟|