顧亭亭
南京航空航天大學(xué)金城學(xué)院 江蘇 211156
Windows CE 是微軟公司推出的一款功能強(qiáng)大的實(shí)時(shí)嵌入式操作系統(tǒng),他可以用在手機(jī)、機(jī)頂盒、智能手持設(shè)備、網(wǎng)關(guān)、數(shù)字媒體設(shè)備、工業(yè)控制等多種場合。由于Windows CE采用模塊化設(shè)計(jì),開發(fā)人員可以根據(jù)系統(tǒng)的需要選擇自己需要的模塊,從而達(dá)到減小系統(tǒng)體積的目的,已經(jīng)越來越多地被開發(fā)廠商支持及使用,迅速成為嵌入式操作系統(tǒng)主流平臺(tái)之一。Windows CE 操作系統(tǒng)有著優(yōu)越的網(wǎng)絡(luò)性能,是最早在其內(nèi)核中加入TCP/IP協(xié)議的嵌入式實(shí)時(shí)操作系統(tǒng)之一。隨著網(wǎng)絡(luò)的發(fā)展和嵌入式設(shè)備的普及,本文討論了在Windows CE下實(shí)現(xiàn)網(wǎng)絡(luò)通信的關(guān)鍵技術(shù)和設(shè)計(jì)方法。
在 Windows CE 產(chǎn)品開發(fā)前,需要進(jìn)行系統(tǒng)的定制。Platform Builder 是微軟提供給 Windows CE 開發(fā)人員進(jìn)行基于Windows CE 平臺(tái)下嵌入式操作系統(tǒng)定制的集成開發(fā)環(huán)境。它包括了基本的文件編輯能力、多目標(biāo)編譯調(diào)試工具包、特性編輯器、軟件開發(fā)工具包(Software Development Kit,SDK)導(dǎo)出工具、向?qū)Чぞ咭约坝糜谧鰷y試、性能分析等工作的多個(gè)工具包,從而能夠更加方便快捷地配置、構(gòu)造和調(diào)試系統(tǒng)。Platform Builder 的強(qiáng)大功能,已使其成為Windows CE平臺(tái)下嵌入式操作系統(tǒng)開發(fā)和定制的必備工具。
對系統(tǒng)的定制要掌握一個(gè)原則,就是在功能保證完備的情況下,盡可能地減小內(nèi)核的尺寸,以節(jié)省資源。由于Windows CE 操作系統(tǒng)采用模塊化結(jié)構(gòu)設(shè)計(jì),所以在定制操作系統(tǒng)時(shí)只需根據(jù)設(shè)計(jì)需要添加相應(yīng)的模塊。定制平臺(tái)前要導(dǎo)入硬件平臺(tái)的BSP(板級支持包),BSP 里包含了硬件平臺(tái)的驅(qū)動(dòng)和操作系統(tǒng)所需要的應(yīng)用軟件,本系統(tǒng)采用的是微軟公司提供的針對該處理器的BSP樣本。此外,定制操作系統(tǒng)還要依據(jù)不同的處理器選擇相應(yīng)的ARM版本。
Windows CE 6.0在網(wǎng)絡(luò)通信方面提供了完善的軟件支持,包括:
(1) 提供與Unix完全兼容的Socket API函數(shù),使其他平臺(tái)的網(wǎng)絡(luò)應(yīng)用程序很容易移植到 Windows CE中,而Windows CE中的應(yīng)用程序也容易移植到其他平臺(tái)中;
(2) 操作系統(tǒng)本身也包含大量各種網(wǎng)絡(luò)協(xié)議,如TCP/IP、UDP、ICMP等;
(3) 操作系統(tǒng)本身提供各種網(wǎng)絡(luò)服務(wù),如IIS、TFTP;
(4) 提供小端口網(wǎng)卡驅(qū)動(dòng)程序接口,只需編寫網(wǎng)卡的小端口驅(qū)動(dòng)程序就能利用該網(wǎng)卡實(shí)現(xiàn)上面提供的各種網(wǎng)絡(luò)協(xié)議及網(wǎng)絡(luò)服務(wù);
(5) 以上各層軟件的關(guān)系如圖1所示。
圖1 Windows CE網(wǎng)絡(luò)通信體系結(jié)構(gòu)
TCP通信是一種面向連接的、可靠的、基于字節(jié)流的傳輸層通信協(xié)議。具有五大特點(diǎn):①面向連接的傳輸;②端到端的通信;③高可靠性;④全雙工方式傳輸;⑤采用字節(jié)流方式。
TCP通信是指在進(jìn)行通信之前,通信雙方必須建立連接,通信結(jié)束之后終止其連接。也就是指當(dāng)兩臺(tái)計(jì)算機(jī)上的兩個(gè)應(yīng)用程序之間利用TCP進(jìn)行通信時(shí),源和目標(biāo)之間會(huì)建立一個(gè)虛擬連接,這個(gè)連接一旦建立,兩臺(tái)計(jì)算機(jī)之間就可以把數(shù)據(jù)當(dāng)作一個(gè)雙向字節(jié)流進(jìn)行交換。
TCP建立的連接是端到端的連接,即源與目標(biāo)之間的連接。TCP協(xié)議向應(yīng)用層提供了面向連接的服務(wù),以確保網(wǎng)絡(luò)上所傳送的數(shù)據(jù)包被完整、正確、可靠的接收。一旦數(shù)據(jù)有損傷或丟失,則由TCP負(fù)責(zé)重傳,應(yīng)用層不參與解決。
本文在Windows CE中實(shí)現(xiàn)一個(gè)TCP客戶端應(yīng)用程序,向PC機(jī)端的TCP服務(wù)器請求連接,連接成功后,客戶端應(yīng)用程序就可以與PC端的TCP服務(wù)端應(yīng)用程序進(jìn)行TCP通信了,連接的流程圖如圖2所示。在網(wǎng)絡(luò)應(yīng)用中,網(wǎng)絡(luò)通信一般可通過Socket實(shí)現(xiàn)。Socket編程均采用客戶機(jī)/ 服務(wù)器模式。
圖2 連接流程圖
由于在Windows CE下的TCP/IP協(xié)議處理方法是分別在服務(wù)器端和客戶機(jī)端創(chuàng)建Socket程序,建立通信聯(lián)系的,下面就分別給出服務(wù)器端Socket和客戶機(jī)端 Socket的實(shí)現(xiàn)方法。調(diào)用的主要函數(shù)有:創(chuàng)建套接字函數(shù) socket、監(jiān)聽函數(shù)listen、等待連接函數(shù)accept、數(shù)據(jù)接收函數(shù)read、數(shù)據(jù)發(fā)送函數(shù)write 等。
2.3.1 服務(wù)器端socket操作
(1) 建立套接字函數(shù)socket;
(2) 綁定地址和端口函數(shù)bind,將該socket與本機(jī)地址和端口號(hào)捆綁;
(3) 建立套接口隊(duì)列函數(shù)listen,在監(jiān)聽端口上監(jiān)聽客戶機(jī)的連接請求;
(4) 接收連接函數(shù) accept,當(dāng) accept捕捉到一個(gè)連接請求時(shí),就建立連接線路并返回一個(gè)新的通信文件描述符;
(5) 處理連接函數(shù)read/write;
(6) 關(guān)閉套接口close。
服務(wù)器端利用Visual C++編寫可運(yùn)行于PC機(jī)上的TCP通信應(yīng)用程序。該程序調(diào)用Windows平臺(tái)提供的Socket API函數(shù),使用TCP協(xié)議。服務(wù)器端首先創(chuàng)建一個(gè)socket,等待與客戶機(jī)端的連接,連接成功后進(jìn)行數(shù)據(jù)的傳送。
2.3.2 客戶機(jī)端socket操作
(1) 創(chuàng)建客戶端的Socket
客戶端應(yīng)用程序首先調(diào)用WSAStartup函數(shù)來與Winsock的動(dòng)態(tài)連接庫建立關(guān)系,然后調(diào)用 socket來建立一個(gè) TCP socket。socket 函數(shù)第一個(gè)參數(shù)只能是 AF_INET,socket函數(shù)的第二個(gè)參數(shù)設(shè)置位SOCK_STREAM,其第三個(gè)參數(shù)指定為0。
(2) 向服務(wù)器提出連接申請
對客戶端來說,它不需要綁定,可以直接連接服務(wù)器端。調(diào)用 connect函數(shù)來提出與服務(wù)器端建立連接的申請,首先定義一個(gè)地址結(jié)構(gòu)體變量,并對其成員進(jìn)行賦值,設(shè)定服務(wù)器端的IP地址和端口。
(3) 和服務(wù)器端進(jìn)行通信
當(dāng)建立連接后,就可以調(diào)用send函數(shù)向服務(wù)器端發(fā)送數(shù)據(jù)了,之后調(diào)用recv函數(shù)接收服務(wù)器發(fā)送的數(shù)據(jù)。
(4) 關(guān)閉套接字
當(dāng)完成通信后,調(diào)用closesocket函數(shù)關(guān)閉套接字,釋放為此套接字分配的資源。最后調(diào)用WSACleanup函數(shù),終止對套接字庫的使用。
客戶端利用 Visual Studio 2005編寫一個(gè)可運(yùn)行于Windows CE 6.0操作系統(tǒng)上的應(yīng)用程序,該程序調(diào)用Windows CE平臺(tái)提供的Socket API函數(shù),使用TCP協(xié)議,通過以太網(wǎng)芯片驅(qū)動(dòng)。
用網(wǎng)線連接PC機(jī)與網(wǎng)絡(luò)終端,在網(wǎng)絡(luò)終端中的以太網(wǎng)芯片設(shè)置Windows CE的IP地址,確保通過PC可以Ping通網(wǎng)絡(luò)終端。在PC機(jī)上運(yùn)行TCP測試工具軟件,設(shè)置本機(jī)端口號(hào)為1011,然后點(diǎn)擊“Connection”按鈕,啟動(dòng)一個(gè)TCP服務(wù)。在Windows CE中,點(diǎn)擊Embedded_TCP.exe,在跳出的對話框中填寫要連接的服務(wù)端地址(即 PC機(jī)地址,為192.168.2.22)和端口號(hào)(為1011),然后單擊“connect”按鈕,創(chuàng)建成功,按鈕會(huì)變成不可用,否則會(huì)報(bào)錯(cuò)。這時(shí),TCP測試工具軟件中監(jiān)聽到一個(gè)客戶端連接,就可以與客戶端進(jìn)行網(wǎng)絡(luò)通信了,如圖3所示。
圖3 通信軟件測試
本文根據(jù)Windows CE操作系統(tǒng)的特點(diǎn)和TCP協(xié)議,利用Socket套接字編程,設(shè)計(jì)了在Windows CE下的網(wǎng)絡(luò)通信軟件,并在網(wǎng)絡(luò)終端中運(yùn)行成功。軟件可實(shí)現(xiàn)嵌入式網(wǎng)絡(luò)終端和PC 機(jī)之間的通信功能,具有較大的靈活性和擴(kuò)展性。在此基礎(chǔ)上可開發(fā)文本傳輸、通信故障檢測等應(yīng)用軟件。
[1]鄧成中,黃惟公,萬松峰.基于嵌入式 ARM&WinCE的小型監(jiān)控系統(tǒng)的設(shè)計(jì)[J].微計(jì)算機(jī)信息.2005.
[2]吳弋旻,葛海江,張能貴.基于 WinCE 的模擬鍵盤驅(qū)動(dòng)程序的實(shí)現(xiàn)[J].機(jī)電工程.2008.
[3]林建民.嵌入式操作系統(tǒng)技術(shù)發(fā)展趨勢[J].計(jì)算機(jī)工程.2001.
[4]YAGBMOUR K.構(gòu)建嵌入式Linux[M].韓存兵,龔波,譯.北京:中國電力出版社.2004.
[5]何宗鍵. Windows CE 嵌入式系統(tǒng)[M].北京:北京航空航天大學(xué)出版社.2006.
[6]謝希仁.計(jì)算機(jī)網(wǎng)絡(luò)[M].大連:大連理工大學(xué)出版社.2004.
[7]李巧玲.基于C#-Socket的網(wǎng)絡(luò)通信程序設(shè)計(jì)[J].福建電腦.2009.