Windows CE 是Microsoft 公司專門針對嵌入式產品領域開發的嵌入式操作係統,該係統是一種緊湊、高效、可伸縮的32 位的操作係統,主要麵向各種嵌入式係統和產品。它所具有的多線程、多任務、完wan全quan搶qiang占zhan式shi的de特te點dian是shi專zhuan為wei各ge種zhong有you很hen嚴yan格ge資zi源yuan限xian製zhi的de硬ying件jian係xi統tong所suo設she計ji的de。它ta的de模mo塊kuai化hua設she計ji使shi嵌qian入ru式shi係xi統tong和he應ying用yong程cheng序xu開kai發fa者zhe能neng夠gou方fang便bian地di加jia以yi定ding製zhi以yi適shi應ying一yi係xi列lie產chan品pin,例li如ru:消費類電子設備、專用工業控製器和嵌入式通信設備等的需要[1]。
Windows CE最大的好處在於界麵的通用性,用戶容易接收;同時,可以將Windows通用操作係統下的應用程序移植到嵌入式應用係統中。關於Windows CE的研究文獻有許多,但是缺少從構建平台到網絡應用的係統分析,本文從網絡應用出發,深入研究Windows CE下如何實現TCP/IP協議,這對嵌入式網絡應用很有意義。
1 基於Windows CE的嵌入式係統的結構[2][3]
要進行嵌入式係統的應用開發,必須先建立一個開發平台。一個基於Windows CE 的平台由Windows CE 操作係統核組件、OEM 適配層(OEM Adaptation Layer ,OAL) 和設備驅動程序以及組成係統的硬件設備組成,圖1為基於Windows CE平台的層次結構。
從圖1 中可以看出,一個基於Windows CE 的嵌入式係統可分為四個層次,從底層到上層分別是硬件層、OEM層、操作係統層和應用程序層。
圖1 基於Windows CE的目標平台及其組件
硬件層是係統的硬件,包括微處理器和各種周邊設備。OEM層是一個硬件抽象層,它提供了硬件和操作係統之間的接口,操作係統要訪問具體的硬件就可以通過OEM層提供的API 進行訪問,而不必直接與硬件打交道。操作係統層中有Windows CE 的(de)組(zu)件(jian),用(yong)戶(hu)可(ke)以(yi)根(gen)據(ju)自(zi)己(ji)的(de)係(xi)統(tong)的(de)需(xu)要(yao)進(jin)行(xing)定(ding)製(zhi),選(xuan)擇(ze)需(xu)要(yao)的(de)組(zu)件(jian),去(qu)掉(diao)不(bu)必(bi)要(yao)的(de)組(zu)件(jian),這(zhe)樣(yang)可(ke)以(yi)減(jian)小(xiao)內(nei)存(cun)需(xu)求(qiu),使(shi)係(xi)統(tong)性(xing)能(neng)達(da)到(dao)最(zui)佳(jia)。應(ying)用(yong)程(cheng)序(xu)層(ceng)是(shi)用(yong)戶(hu)為(wei)特(te)定(ding)的(de)嵌(qian)入(ru)式(shi)係(xi)統(tong)開(kai)發(fa)的(de)應(ying)用(yong)程(cheng)序(xu)。
Windows CE的網絡通信基於一個按層組織的網絡堆棧[1 ] (network stack) ,如圖2所示。網絡堆棧實際上是Windows CE 的一個組件,它絡堆棧實際上是Windows CE 的de一yi個ge組zu件jian,它ta負fu責ze對dui網wang絡luo中zhong的de數shu據ju傳chuan輸shu進jin行xing處chu理li,將jiang來lai自zi於yu應ying用yong程cheng序xu的de數shu據ju分fen解jie成cheng若ruo幹gan小xiao段duan,並bing為wei每mei小xiao段duan加jia上shang相xiang關guan地di址zhi和he段duan的de分fen割ge信xin息xi,組zu成cheng可ke以yi存cun貯zhu轉zhuan發fa的de信xin息xi包bao(packets) ,信息包中的地址確保數據達到最終的目的端點。訪問網絡堆棧有如下三種方式:第一種是WinSock端口套接字方式。這是一個中間層的傳輸接口協議,WinSock 負責對建立的信息包的所有頭信息細節進行處理, 但可以不管其數據格式。Windows CE 的網絡通信都直接或間接地使用WinSock。采用IrDA 協議實現基於紅外線套接字的客戶/ 服務器網絡通信是Windows CE平台的一個特色。第二種為WinInet API 方式。WinInet API是微軟公司基於Win32 平台的互聯網函數接口。Windows CE 的WinInet API 對其進行了某些限製或擴展,它提供的高級數據協議除了常見的超文本傳輸協議HTTP 和文件傳輸協議FTP 外,還提供了對SSL的支持。API 方式避免了直接使用WinSock 訪問網絡的操作,簡化了網絡編程。第三種為CIFS 重定位器方式。Windows CE 通過對遠程訪問服務RAS 客戶的支持,允許基於Windows CE的設備與遠程主機建立連接。
3 Windows CE 中網絡通信協議使用實例
3.1 HTTP
Windows CE提供了一個開發Internet 客戶應用程序的工具集WinInet,與使用Socket 建立網絡連接的方法相比,它簡化了訪問互聯網絡的操作細節。利用WinInet可連接到遠程站點,訪問HTML 頁麵,通過FTP 上傳、下載文件或獲取文件目錄清單等。WinInet 的Windows CE版本類似於桌麵平台上的WinInet ,但有兩個重要的區別:一是在Windows CE 中,大多數callback 函數以同步方式處理,隻有InternetReadFile和InternetQueryDataAvailable 具有同步和異步兩種操作方式;二是Windows CE 默認支持Unicode 碼,所有WinInet 函數都要求寬字符變量[4]。
在硬件設計成功後,就需要創建一個基於Windows CE 的嵌入式平台,有了平台,用戶就可以利用Windows CE 的開發工具在該平台上進行應用程序的開發。為了創建一個基於Windows CE 的平台,首先需要選擇一個Windows CE OS 配置,安裝或創建一個OAL 和設備驅動程序,創建一個基於用戶配置的OS映像文件,並開發一個將映像文件傳輸到目標設備的引導程序[1][2][3]。
首先,選擇一個Windows CE OS 配置,然後加入一個OAL 和設備驅動程序。可以創建自己的OAL ,使用一個預先配置好的BSP(Board Support Package)或者創建自己的BSP。一個BSP 包含一個OAL 、設備驅動程序和定製的硬件缺省的組件列表。
Windows CE Platform Builder3. 0 中包含有CEPC (CE-base PC) 的BSP 和HitachiD9000 硬件開發平台(ODO) ,係統開發者也可以根據需要開發自己的BSP 或者利用第三方開發好的BSP。