片上PowerPC在VxWorks下的UDP千兆網(wǎng)通信
?、扌薷膕ysL ib.c,以顯示正確的信息;
本文引用地址:http://dyxdggzs.com/article/83944.htm?、咴O置主機IP地址。
經(jīng)過(guò)以上修改之后,將新的BSP放在Tornado的安裝目錄Tornado_root\target\config下。根據這個(gè)BSP,在Tornado集成環(huán)境下生成一個(gè)新的VxWorks工程,然后就可以進(jìn)行一般的嵌入式操作系統開(kāi)發(fā)了。
EDK中RAM和ROM的地址映射如表1所列。
若為表1所列的工程,則在config.h和Makfile文件中要進(jìn)行如下修改:
sysNet.c中通過(guò)以下語(yǔ)句定義了網(wǎng)絡(luò )的MAC地址,必須根據真實(shí)的MAC地址進(jìn)行修改,如本文的MAC地址:00:0A:35:01:88:25
sysSerial.c對串口進(jìn)行初始化,因為要正確地指定串口ID,sysLib.c中可以顯示VxWorks鏡像的信息,因此也要進(jìn)行相應的修改,如將
通過(guò)對EDK下牛成的BSP的修改,并在Tornado集成環(huán)境下生成正確的VxWorks鏡像后,可以將其下載到FPGA中。觀(guān)察串口的輸出是否正確,可以進(jìn)行相應的調試工作,以確定BSP的移植是正確的。
3 UDP服務(wù)器/客戶(hù)端程序
對VxWorks BSP進(jìn)行正確的配置和修改后,在useAppInit.c中書(shū)寫(xiě)自己的UDP服務(wù)器端程序。本設計用基于socket的UDP通信。
網(wǎng)絡(luò )通信一般可通過(guò)socket實(shí)現。socket編程均采用客戶(hù)機/服務(wù)器模式,VxWorks提供了標準的BSDsocket調用,支持UDP協(xié)議。UDP協(xié)議即數據傳輸協(xié)議,它允許創(chuàng )建和維護與遠程計算機的連接,使其彼此可以進(jìn)行數據傳輸。通信過(guò)程如圖2所示。
服務(wù)器首先調用socket()建立一個(gè)套接字socket,然后調用bind()將套接字與一個(gè)本地網(wǎng)絡(luò )地址(IP地址和端口號)捆綁在一起,以保證客戶(hù)端正確識別。接著(zhù)服務(wù)器再調用listen()使套接字處于被動(dòng)的準備接收狀態(tài),同時(shí)規定它的請求隊列長(cháng)度,隨后調用accept()來(lái)接收客戶(hù)連接。服務(wù)器進(jìn)程隨即進(jìn)入阻塞狀態(tài)??蛻?hù)與服務(wù)器的關(guān)系是不對稱(chēng)的。服務(wù)器先啟動(dòng)。然后在某時(shí)刻客戶(hù)主動(dòng)發(fā)出請求,服務(wù)器被動(dòng)應答。
客戶(hù)端程序首先調用socket(),這個(gè)函數產(chǎn)生用于與各分系統連接的套接口,并為每個(gè)套接口返回一個(gè)ID號。然后初始化一個(gè)套接口結構體,為其賦上該 ID號以及服務(wù)端的IP地址和端口號,并將其作為函數connect()的參數.調用connect()函數主動(dòng)去連接服務(wù)端。
當服務(wù)端與客戶(hù)端建立連接之后,就可以發(fā)送(write)和接收(read)數據。部分代碼如下:
客戶(hù)端應用程序在Windows下用VC實(shí)現,代碼略。
4 實(shí)驗結果
結合工程實(shí)際開(kāi)發(fā)的順序,分2步對VxWorks下千兆網(wǎng)通信進(jìn)行測試:
第1步,在usrAppInit.c中打印hello the world,若出現圖3所示窗口,則證明VxWorks內核已正確加載,以及BSP移植的正確性。程序跑到用戶(hù)編寫(xiě)的usrAppInit.c。
第2步,對編寫(xiě)的UDP服務(wù)器/客戶(hù)端進(jìn)行測試,結果如表2所列。
5 結 論
由于FPGA中嵌入了PowerPC處理器及用于千兆網(wǎng)通信的Ethernet MAC,這樣,為利用FPGA實(shí)現高速網(wǎng)絡(luò )通信奠定了基礎。本文在VxWorks操作系統下實(shí)現了UDP的千兆網(wǎng)通信,實(shí)測速度達到294.68 Mb/s,吞吐量達到近30%。
評論