嵌入式检测系统的应用程序设计

嵌入式操作系统

57人已加入

描述

  1、 引言

  嵌入式系统(Embedded Systems)被定义为以应用为中心,以计算机技术为基础,软件硬件可裁剪,适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统,它是面向用户、产品和用户的,它具有功耗低、体积小、可靠性高、处理速度快等优点。该嵌入式检测系统采用嵌入式微控制器(microcontroller unit)为核心,以单片机89C52和Philip公司的单纯的USB接口芯片PDIUSBD12为主要器件,所以该检测系统是一个USB接口设备,而USB接口设备在生活中已经随处可见了,它由三部分组成:具有USB接口的PC系统,能够支持USB的系统软件和使用USB接口的设备。它的提出是基于采用通用连接技术,实现外设的简单快速连接,达到方便用户、降低成本、扩展PC连接外设范围的目地。它的最显著优点是支持热插拔,当用户插入USB外设后,计算机能够自动识别接入的外设,而不需要重新启动系统。

  用户对USB设备的控制是通过应用程序来实现的。但应用程序不能直接访问USB设备,它必须先与驱动程序通信,通过驱动程序来访问USB设备。所以,应用程序的工作是把用户的对设备的请求翻译成相应的控制代码,并将其传递给驱动程序,同时还负责接收从驱动程序返回的数据。为对应用程序的工作原理有一个较深入的了解,下面先总体介绍一下应用程序与USB设备的通信流程。

  2、 USB总线特性

  USB是英文Universal Serial Bus的缩写,中文含义是“通用串行总线”。它不是一种新的总线标准,而是应用在PC领域的新型接口技术。

  那么为什么选用USB呢?因为它具有很多很好的特性。包括:

  2.1使用方便

  使用USB接口可以连接多个不同的设备,支持热插拔。在软件方面,为USB设计的驱动程序和应用软件可以自动启动,无需用户干预。 USB设备也不涉及IRQ冲突等问题,它单独使用自己的保留中断,不会同其它设备争用PC机有限的资源,为用户省去了硬件配置的烦恼。USB设备能真正做到“即插即用”。

  2.2速度加快

  快速性能是USB技术的突出特点之一。USB接口的最高传输率比串口快了整整100倍,也比并口快了十多倍。今后USB的速度还将会不断提高。

  2.3连接灵活

  USB接口支持多个不同设备的串列连接,一个USB口理论上可以连接127个USB设备。而每个外设间距离(电缆长度)可达5米。USB还能智能识别USB链上外围设备的接入或拆卸。 在USB方式下,所有的外设都在机箱外连接,不必打开机箱;

  2.4独立供电

  普通使用串口、并口的设备都需要单独的供电系统,而USB设备则不需要,因为USB接口提供了内置电源。USB电源能向低压设备提供5V的电源,因此新的设备就不需要专门的交流电源了,从而降低了这些设备的成本并提高了性价比。

  3、通信流程

  在应用程序与设备开始通信之前,设备必须先连接在总线上。然后Windows检测该设备,通过设备列举,取得设备的各种描述符。Windows将从该设备所读取的描述符,与它的.inf文件做比较来识别该设备,找出应该使用哪个设备驱动程序来与设备通信,然后载入选定的驱动程序。

  接下来应用程序取得一个设备的句柄,此句柄让应用程序识别该设备以及与它通信。设备的句柄是一个惟一的标识符,由Windows指定给每个设备的实例变量。应用程序通过调用带有一个能识别该设备的符号链接的CreateFile API函数,来取得该设备的句柄。该符号链接包含一个全域惟一标识符(globally unique identifier,GUID)。GUID是一个128位的号码,Windows用来惟一识别一个对象。

  当设备已经连接好准备传输数据后,主机就可以开始要求传输。当用户要读取一个数据捕获单位的数据时,他可以按下应用程序的按钮来读取一个读数,或是选择让应用程序每分钟要求一个读数。

  在用户请求一个传输之后,应用程序开始与设备通信。它通过API函数来与USB设备沟通。API包含有3个与设备交换数据的函数:ReadFile,WriteFile和DeviceControl。 ReadFIle与WriteFile是一般用途的函数,用来读取与写入数据到驱动程序内。读取与写入的数据,是储存在函数所指定的缓冲区内。DeviceIoControl是另一个传输缓冲区数据的函数,它包含一个码用来识别一个特定的要求。与ReadFile和WriteFile不同的是,DeviceIoControl函数可以双向传输数据。

  当一个应用程序启动一个API调用来读/写一个USB设备时,Windows把此调用传递给合适的设备驱动程序。设备驱动程序把请求转换为USB总线类驱动能理解的格式。

  当应用程序与设备的通信结束时,对于此设备驱动程序的句柄就必须通过CloseHandle API释放出来。当其中的一个应用程序调用CloseHandle函数,驱动程序首先收到“清除”IRP,驱动程序应当在“清除”例程中清除和此设备有关的待处理的IRP。然后收到“关闭”设备对象。到此,一个完整的通信过程就完成了。

  4、应用程序的工作过程

  应用程序在工作前首先要获得设备的内部名,按内部名打开其驱动程序,然后发送控制代码。如图1所示。

  嵌入式

  图1 应用程序的工作过程

  设备的内部名是操作系统为设备分配的全局唯一的标识符,需要用操作系统的API来获得。具体的过程如下:

  a.通过GUID号获得设备信息句柄;

  b.通过设备信息句柄获得设备接口句柄;

  c.用设备接口句柄获取设备详细信息;

  d.在设备详细信息中取得设备内部名;

  e.释放所用的内存资源。

  获得设备的内部名后,调用CreateFile函数就可打开设备的驱动程序,该函数返回一个指向驱动程序的句柄。

  取得了驱动程序的句柄后,调用函数DeviceIoControl就可发送控制代码对设备进行通信。

  5、开发工具

  应用程序是用Visual C++6.0来编写的。Visual C++6.0是Microsoft公司在1998年推出的基于Windows9x和WindowsNT的优秀集成开发环境。它的主要优点如下:

  (1) Visual C++的最大特色就是提供面向对象技术的支持,它利用类把大部分与用户界面设计有关的函数封装起来,通过MFC(Microsoft Foundation Class)类库的方式提供给开发人员使用,大大提高了程序代码的重用性。

  (2) Visual C++提供一个功能强大的应用程序生成向导------AppWizard。AppWizard将帮助MFC类库的用户自动生成一个运行程序框架------一个空的不能做任何事情的应用程序,而用户只需要在该框架的适当部分扩充代码就可以得到一个满意的应用程序。

  (3) Visual C++利用“所见即所得”的方式完成程序界面的设计,大大减轻了程序设计人员的劳动强度,提高了开发效率。

  (4) Visual C++的功能强大,用途广泛,不仅可以编写普通的应用程序,还能很好地进行系统软件及通信软件的开发。

  结束语:功能强大的USB规格已经成为PC的众多标准之一,钻研计算机科技的种种发展,都离不开USB的相关知识。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分