图6-10 嵌入式应用系统结构
嵌入式应用系统通常由嵌入式硬件平台、设备驱动程序、嵌入式操作系统和嵌入式应用程序组成。嵌入式硬件平台由具体应用硬件和接口设备构成;设备驱动程序实现应用功能与接口设备的信息软件;嵌入式操作系统运行硬件平台上,实现系统资源的管理;应用程序是根据应用需求来实现其功能的具体应用软件。应用程序在确定的操作系统平台上运行,通过调用操作系统的功能和硬件设备驱动程序,以及进行数据信息处理来实现其应用功能目标,嵌入式应用系统的基本结构如图6-10所示,从软件分层结构来看,是典型的2层结构体系,即“应用—实现”。
由于各种嵌入式应用目标的差异,以及使用的嵌入式操作系统的不同,具有同样功能的嵌入式应用程序(比如I/O接口数据采集、数据显示等),需要针对特定的嵌入式操作系统编程,应用开发者不但要关注具体应用的问题,而且要花费大量的精力去了解下层平台的特性,并解决所处平台之间的差异,而且编制的应用程序不能直接移植到其他操作系统上运行,使嵌入式应用程序的开发成为瓶颈。为了能够实现对嵌入式应用产品的快速开发,适应市场需求,就需要解决应用程序在不同嵌入式操作系统上实现移植和编程代码的重用性问题。因此在这里引入了面向应用编程的中间件技术,研究探索一条实现嵌入式应用程序开发的快捷途径,实现应用程序的可移植性和代码的重用性,提高物联网中嵌入式应用产品的开发效率和开发速度。
1.嵌入式中间件的架构
嵌入式中间件由于是针对嵌入式系统的特点和资源条件进行设计的,与普通的PC或Serv-er的中间件体系结构是有很大差异的。嵌入式中间件是介于嵌入式应用程序和操作系统、硬件平台之间的一个中间层次,它与操作系统类型和硬件平台结构无直接关系,对应用程序使用什么样的语言来实现也没有要求,它为应用程序提供一个统一规范的编程接口或请求管理机制,应用程序只需通过功能调用或请求响应来实现其应用功能。具体的嵌入式应用产品,其功能需求目标各不相同,对软硬件接口功能的要求也有差异,通过定义一组面向应用编程的,具有标准应用程序接口,为嵌入式应用软件的开发,建立一个能够在不同操作系统平台和硬件平台上运行的具有层次结构好、模块化程度高的通用扩展接口,形成一个嵌入式中间件的基本架构。要实现这一目标,必须要做到两点,建立一个标准化的面向应用编程的接口规范,为应用程序提供直接透明的系统调用功能和操作系统的功能扩展;将标准化的编程接口,构建成为能够满足多种硬件平台、独立于操作系统、代码可移植和重用的开发工具集,即应用编程中间件。是解决在不同的嵌入式平台上,实现应用程序的移植性和互操作以及编程代码的重用性等问题的有效途径。面向应用编程嵌入式中间件的结构如图6-11所示,按软件分层结构的划分,属于4层体系结构,即“应用—中间件—实现—硬件”。
图6-11 嵌入式中间件结构
在对嵌入式操作系统的应用中,针对嵌入式操作系统具有可裁减、可封装的特性,分析明确了构建面向应用编程的嵌入式中间件的技术路线之后,关键在于实现对中间件的方法,将应用的各种功能需求抽象出来,建立一个标准化的面向应用编程的接口规范,屏蔽操作系统的底层具体细节,特别是能够屏蔽不同的操作系统之间的差异。通过调用规范的系统功能调用接口,能够大幅度地降低开发难度,提高应用程序的可移植性、可维护性和可继承性。作为嵌入式的操作系统,通常是由一个基本的内核组成,为用户提供任务管理、内存管理、文件管理和设备驱动等基本功能,根据具体的应用需求进行相应的扩充,例如Linux和Win-CE都是如此。将操作系统扩展层功能和系统调用功能设计成为界于应用程序和操作系统之外的一个嵌入式中间层,使其对应用程序具有通用的功能调用编程接口,对操作系统或硬件具有实现其功能调用的硬件设备驱动和资源协调功能,这就使得在进行应用软件设计时,仅需要关心为实现硬件设备驱动和资源协调所对应的功能调用编程接口,不需要了解设备驱动和资源协调具体的操作步骤和控制机理,这就降低了嵌入式应用程序的编程难度,应用开发过程变得快捷,程序代码的复用程度提高。
2.嵌入式中间件的架构设计(www.xing528.com)
面向应用编程的嵌入式中间件设计思路,主要是参考POSIX(Portable Operating System Interface,可移植操作系统接口)的结构原理和MinimumCORBA规范的设计思想来进行构建的。POSIX定义了操作系统应为应用程序提供规范的接口和系统调用集的方法;Mini-mumCORBA提出了分布式应用的互操作性、平台无关性、语言无关性的中间件设计方法;同时采用编程组件(Component)技术来实现面向应用编程组件库的设计。
要构建嵌入式中间件,可以通过两种模式来实现,一是将应用编程中间件与操作系统基本内核进行编译封装,形成一个虚拟的嵌入式操作系统、实现应用程序与操作系统直接功能调用,这种方式具有与操作系统耦合度紧密,运行效率较高,但对操作系统的依赖程度过大,不能完全独立于操作系统,对不同的操作系统需要进行大量的优化修改工作。另一种模式是将应用编程中间作为一个独立的软件包运行,形成一个包含标准应用编程接口功能的管理协调运行环境、实现应用程序与操作系统之间代理调度机制。这种方式具有与操作系统独立开来,可以运行在不同的操作系统平台上,但对不同的操作系统,需要对与操作系统交互的接口调度机制进行优化和改进工作。
(1)虚拟操作系统(Virtual Operating System,VOS)模式
在应用程序与操作系统之间构建具有POSIX标准的面向应用编程接口,在嵌入式操作系统基本功能接口的基础上,对这些接口功能采取先实现一个最小的操作系统内核,然后根据应用具体要求,对操作系统进行相应的应用功能扩充,形成一个既包括操作系统基本功能调用,又具有操作系统应用功能扩展的独立于操作系统内核的1个嵌入式中间层,然后对中间层和操作系统内核进行封装,形成1个虚拟操作系统(VOS)的中间件。
该中间层的基本功能和扩展功能就可以作为通用编程接口函数提供给应用编程人员直接调用。当用户程序需要访问系统的硬件资源(如建立数据通信、I/O数据采集,输出驱动控制等)时,采用接口驱动功能模式;用户程序发出系统功能调用申请,中间件层接收到请求后,根据请求的实现目标,向操作系统提交服务需求,操作系统协调硬件资源后,向用户程序返回所需的信息。虚拟操作系统的中间件结构如图6-12所示。
图6-12 虚拟操作系统的中间件结构
(2)组件调用代理模式
将嵌入式应用涉及的设备驱动、功能调用以及相关应用编程接口用组件的形式表现出来,形成标准化的面向应用编程组件库(Application Programming Component,APC),同时在应用程序端建立起组件调用的代理机制,在操作系统端构建功能组件调用管理机制。形成一个具有独立运行管理功能的中间件层,由这个中间件层来实现应用程序与嵌入式操作系统之间的请求代理和功能调度,从而完全实现了应用程序的可移植性、可维护性和可继承性,同时也实现了对不同操作系统能够直接进行底层系统功能调用。当应用程序要实现1个应用功能时,将应用请求发送给中间件,中间件根据应用程序请求,通过调用代理机制,代理执行面向应用编程组件,来实现对操作系统的功能调用,完成嵌入式应用功能,并将结果信息通过调用代理机制返回给应用程序。组件调用代理中间件结构如图6-13所示。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。