根据IEEE(电气和电子工程师协会)的定义,嵌入式系统是"控制、监视或者辅助装置、机器和设备运行的装置"(devices used tocontrol,monitor, or assist the operation ofequipment, machinery or plants)。从中可看出嵌入式系统是软件和硬件的综合体,还可以涵盖机械等附属装置。嵌入式系统是与应用紧密结合的,具有很强专用性,必须结合实际系统需求进行合理的裁减利用。国内一个普遍被认同的定义是:以应用为中心、以计算机技术为基础、软件硬件可裁剪、适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。近年来,随着电子技术的不断进步,嵌入式系统开发己成为热点,Windows CE 是Microsoft 公司专门针对嵌入式产品领域开发的嵌入式操作系统,该系统是一种紧凑、高效、可伸缩的32 位的操作系统,主要面向各种嵌入式系统和产品。它所具有的多线程、多任务、完全抢占式的特点是专为各种有很严格资源限制的硬件系统所设计的。它的模块化设计使嵌入式系统和应用程序开发者能够方便地加以定制以适应一系列产品,例如:消费类电子设备、专用工业控制器和嵌入式通信设备等的需要。
WindowsCE是微软公司嵌入式、移动计算平台的基础,它是一个开放的、可升级的32位嵌入式操作系统,是基于掌上型电脑类的电子设备操作系统,它是精简的Windows 95,Windows CE的图形用户界面相当出色。Windows CE作业系统是Windows家族中最新的成员,专门设计给掌上型电脑(HPCs)所使用的电脑环境。这样的作业系统可使完整的可携式技术与现有的Windows桌面技术整合工作。
1 基于Windows CE的嵌入式系统的结构
要进行嵌入式系统的应用开发,必须先建立一个开发平台。一个基于Windows CE 的平台由Windows CE 操作系统核组件、OEM 适配层(OEM Adaptation Layer ,OAL) 和设备驱动程序以及组成系统的硬件设备组成,图1为基于Windows CE平台的层次结构。
从图1 中可以看出,一个基于Windows CE 的嵌入式系统可分为四个层次,从底层到上层分别是硬件层、OEM层、操作系统层和应用程序层。
图1 基于Windows CE的目标平台及其组件
硬件层是系统的硬件,包括微处理器和各种周边设备。OEM层是一个硬件抽象层,它提供了硬件和操作系统之间的接口,操作系统要访问具体的硬件就可以通过OEM层提供的API 进行访问,而不必直接与硬件打交道。操作系统层中有Windows CE 的组件,用户可以根据自己的系统的需要进行定制,选择需要的组件,去掉不必要的组件,这样可以减小内存需求,使系统性能达到最佳。应用程序层是用户为特定的嵌入式系统开发的应用程序。
在操作系统层中,设备管理器提供对可安装设备的支持,允许在系统中安装诸如PC 卡存储器和调制解调器之类的设备已扩充功能,内核提供最基本的操作系统功能,例如进程调度、内存管理、进程通信等。图形、窗口事件处理模块将用户的击键、鼠标移动和控件选择转换为消息,传送给应用程序和操作系统来处理用户的输入。对象存储、文件系统、数据库和注理用户的输入。对象存储、文件系统、数据库和注册表提供存储数据的能力。附加技术模块指由CE操作系统提供的一些可选择的专用功能模块,如Java语言支持模块、手写体输入识别模块等。用户界面模块为系统提供一个与PC 电脑上的视窗操作系统类似的图形化操作界面。对系统设计者而言,需要自行开发的是应用程序和直接与硬件有关的部分,包括硬件系统本身、OAL 、设备驱动程序。其中,OAL(OEM 适配层,OEM Adaptation Layer),用来引导系统核心映像和初始化、管理硬件。它是BSP驱动的一部分。BSP板级支持包(board supportpackage),是介于主板硬件和操作系统中驱动层程序之间的一层,一般认为它属于操作系统一部分,主要是实现对操作系统的支持,为上层的驱动程序提供访问硬件设备寄存器的函数包,使之能够更好的运行与硬件主板。在嵌入式系统软件的组成中,就有BSP. 一般硬件设备制造商会为设备提供驱动软件支持,如果有专门为CE 系统编写的驱动程序,只需将其加入到操作系统的相应模块中就可用了。如果没有,则应根据厂商提供的驱动程序开发包编写。通常这些开发包总已经包含了完成各种硬件操作的标准代码,开发者的工作只是将其与相应的CE 系统API函数对应起来。在CE 系统中,所有涉及硬件的操作都通过调用相应的API 接口函数来完成,而OAL 和驱动程序就是要为这些API 函数提供支持,将其翻译为直接对目标硬件进行底层操作。
2 Windows CE 中的网络通信协议
Windows CE的网络通信基于一个按层组织的网络堆栈(network stack),如图2所示。网络堆栈实际上是Windows CE 的一个组件,它络堆栈实际上是Windows CE 的一个组件,它负责对网络中的数据传输进行处理,将来自于应用程序的数据分解成若干小段,并为每小段加上相关地址和段的分割信息,组成可以存贮转发的信息包(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
HTTP是一个客户端和服务器端请求和应答的标准(TCP)。客户端是终端用户,服务器端是网站。通过使用Web浏览器、网络爬虫或者其它的工具,客户端发起一个到服务器上指定端口(默认端口为80)的HTTP请求。(我们称这个客户端)叫用户代理(user agent)。应答的服务器上存储着(一些)资源,比如HTML文件和图像。(我们称)这个应答服务器为源服务器(origin server)。在用户代理和源服务器中间可能存在多个中间层,比如代理,网关,或者隧道(tunnels)。
Windows CE提供了一个开发Internet 客户应用程序的工具集WinInet,与使用Socket建立网络连接的方法相比,它简化了访问互联网络的操作细节。利用WinInet可连接到远程站点,访问HTML 页面,通过FTP 上传、下载文件或获取文件目录清单等。WinInet 的Windows CE版本类似于桌面平台上的WinInet ,但有两个重要的区别:一是在Windows CE 中,大多数callback 函数以同步方式处理,只有InternetReadFile和InternetQueryDataAvailable 具有同步和异步两种操作方式;二是Windows CE 默认支持Unicode 码,所有WinInet 函数都要求宽字符变量[4].
通过WinInet 实现网络通信最常见的例子是利用HTTP 协议访问Internet 站点上的HTTP 页面。其处理过程与桌面平台上的情况一致:
1) 调用InternetOpen ,获取Internet 句柄;
2) 调用InternetConnect ,为给定站点建立一个会话句柄;
3) 调用HttpOpenRequest ,打开一个HTTP 请求句柄;
4) 调用HttpSendRequest ,发送一个指定的请求到HTTP 服务器;
5) 调用InternetReadFile ,从被HttpOpenRequest 所打开的句柄中读数,下载信息;
6) 调用InternetCloseHandle ,关闭Internet 句柄。
3.2 远程访问服务RAS
RAS简称Remote Access Service,意为:远程访问服务,主要用来配置企业的远程用户对企业内部网络访问,包括拨号访问和vpn方式。RAS技术是为了使远程用户能够连接到 Windows NT 操作系统上而设计的。RAS 应用程序常在设备端上执行,并通过PPP/ SLIP 与服务器连接。WindowsCE对RAS 客户提供了支持。尽管有许多标准的Win32 RAS 函数,但这里仅允许通过串行电缆或拨号Modem 建立点对点的连接。在Windows CE 环境下,RAS 电话簿项目中包含有建立RAS 连接的必要信息,Windows CE 将其存贮在注册表中。RAS 电话簿信息包括:拨打的电话号码(含国家和地区代码) 、当前连接的IP 地址、网络协议、用于建立连接的设备类型。用RAS 建立连接的步骤如下[4]:
1)确定呼叫的电话号码;如果该号码不在电话簿中, 则需要调用RasEnumEntries 函数查找。
2)RasDial 建立连接;
DWORD RasDial (LPCTSTR lpszPhonebook ,
/ / 电话簿文件的路径和文件名指针
DWORD dwNotifierType ,
/ / RasDial 事件的句柄类型
LPVOID lpvNotifier ,
/ / RasDial 事件的句柄
LPHRASCONN lphRasConn
/ / 指向连接句柄类型变量) ;该函数的参数设置与桌面平台上的设置不同,要求将lpszPhonebook 设置为NULL ,dwNotifierType 设置为0xFFFFFFFF.
3)当会话结束时,用RasHangUp 终止连接。
DWORD RasHangUp ( HRASCONN hrasconn ) ;
3.3 WAP应用
WAP(Wireless Application Protocol) 为无线应用协议,是一项全球性的网络通信协议。WAP使移动Internet 有了一个通行的标准,其目标是将Internet的丰富信息及先进的业务引入到移动电话等无线终端之中。WAP定义可通用的平台,把目前Internet网上HTML语言的信息转换成用WML(Wireless Markup Language)描述的信息,显示在移动电话的显示屏上。WAP只要求移动电话和WAP代理服务器的支持,而不要求现有的移动通信网络协议做任何的改动,因而可以广泛地应用于GSM、CDMA、TDMA、3G等多种网络。
在开发移动通信产品时候,需要用WAP协议,Windows CE提供了一个WAP的解决方案,开发起来非常方便。该协议栈可以支持任何标准的无线协议,包括GSM、UDP、GPRS等,协议栈包括WAE、WSP、WTP、WTLS、WDP等[3].见图3.
图3 WAP应用
此外,Windows CE还支持蓝牙协议、RFCOMM协议、SDP协议、L2CAP协议等。
4 基于Windows CE嵌入式平台创建
在硬件设计成功后,就需要创建一个基于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.
5 结束语
在嵌入式系统中,网络通信应用越来越广泛。选择一个合适的实时操作系统是开发嵌入式系统的关键。本文研究了Windows CE在网络通信方面的开发工作,今后还有许多问题值得研究,包括在基于ARM的嵌入式应用中如何移植Windows CE中的应用程序,Windows CE的调试工具如何和dsp、MUC的调试工具配合使用等。