基于Windows CE的嵌入式系统的结构分析

基于Windows CE的嵌入式系统的结构分析,第1张

引言

  嵌入式 *** 作系统是支持嵌入式系统应用的 *** 作系统软件,它是嵌入式系统极为重要的组成部分,通常包括与硬件相关的底层驱动软件、系统内核、设备驱动接口、通信协议、图形界面、标准化浏览器等。与通用 *** 作系统相比较,嵌入式 *** 作系统在系统实时高效性、硬件的依赖性、软件固态化以及应用的专用性等方面具有较为突出的特点。嵌入式 *** 作系统的出现,大大提高了嵌入式系统开发的效率,在嵌入式 *** 作系统之上开发嵌入系统将减少系统开发的工作量,增强嵌入式应用软件的可移植性,使嵌入式系统的开发方法更具科学性。近年来,随着电子技术的不断进步,嵌入式系统开发己成为热点,

  Windows CEMicrosoft 公司专门针对嵌入式产品领域开发的嵌入式 *** 作系统,该系统是一种紧凑、高效、可伸缩的32 位的 *** 作系统,主要面向各种嵌入式系统和产品。它所具有的多线程、多任务、完全抢占式的特点是专为各种有很严格资源限制的硬件系统所设计的。它的模块化设计使嵌入式系统和应用程序开发者能够方便地加以定制以适应一系列产品,例如:消费类电子设备、专用工业控制器和嵌入式通信设备等的需要[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层、 *** 作系统层和应用程序层。

基于Windows CE的嵌入式系统的结构分析,第2张

图1 基于Windows CE的目标平台及其组件

  硬件层是系统的硬件,包括微处理器和各种周边设备。OEM层是一个硬件抽象层,它提供了硬件和 *** 作系统之间的接口, *** 作系统要访问具体的硬件就可以通过OEM层提供的API 进行访问,而不必直接与硬件打交道。 *** 作系统层中有Windows CE 的组件,用户可以根据自己的系统的需要进行定制,选择需要的组件,去掉不必要的组件,这样可以减小内存需求,使系统性能达到最佳。应用程序层是用户为特定的嵌入式系统开发的应用程序。

  在 *** 作系统层中,设备管理器提供对可安装设备的支持,允许在系统中安装诸如PC 卡存储器和调制解调器之类的设备已扩充功能,内核提供最基本的 *** 作系统功能,例如进程调度、内存管理、进程通信等。图形、窗口事件处理模块将用户的击键、鼠标移动和控件选择转换为消息,传送给应用程序和 *** 作系统来处理用户的输入。对象存储、文件系统、数据库和注理用户的输入。对象存储、文件系统、数据库和注册表提供存储数据的能力。附加技术模块指由CE *** 作系统提供的一些可选择的专用功能模块,如Java语言支持模块、手写体输入识别模块等。用户界面模块为系统提供一个与PC 电脑上的视窗 *** 作系统类似的图形化 *** 作界面。对系统设计者而言,需要自行开发的是应用程序和直接与硬件有关的部分,包括硬件系统本身、OAL 、设备驱动程序。其中,OAL 是指建立在硬件设备与系统内核之间的一层代码,主要任务是为内核管理具体的硬件设备时钟、中断和实施电源管理提供支持。设备驱动程序负责支持 *** 作系统对目标硬件的访问。OAL 和驱动程序都要针对具体的硬件设备编写。 一般硬件设备制造商会为设备提供驱动软件支持,如果有专门为CE 系统编写的驱动程序,只需将其加入到 *** 作系统的相应模块中就可用了。如果没有,则应根据厂商提供的驱动程序开发包编写。通常这些开发包总已经包含了完成各种硬件 *** 作的标准代码,开发者的工作只是将其与相应的CE 系统API函数对应起来。在CE 系统中,所有涉及硬件的 *** 作都通过调用相应的API 接口函数来完成,而OAL 和驱动程序就是要为这些API 函数提供支持,将其翻译为直接对目标硬件进行底层 *** 作。通过这种方式,CE 系统将应用程序与具体的硬件设备进行了隔离,应用程序只需调用API 函数就可以实现对硬件的访问。这样,程序员在开发应用程序时就没有必要编写任何直接针对硬件的代码,因此不必考虑具体的硬件特性,而应用程序也具有了不依赖于具体硬件设备的独立性。

  2 Windows CE 中的网络通信协议

  Windows CE的网络通信基于一个按层组织的网络堆栈[1 ] (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

  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 是一个用于连接远端设备的基于软件的多协议路由器,也称为RAS 客户,对于桌面主机,则称为RAS 服务器。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。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/dianzi/2712601.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-08-17
下一篇 2022-08-17

发表评论

登录后才能评论

评论列表(0条)

保存