引 言
嵌入式系统不以独立设备的物理形态出现,嵌入式系统的部件根据主体设备以及应用的需要.嵌入在主体设备内部,发挥着运算、处理、存储以及控制等作用。从体系结构看,嵌入式系统主要以嵌人式处理器、支撑硬件和嵌入式软件组成。嵌入式系统的发展已有30多年的历史,早期的嵌入式系统以单个芯片为核心,大部分应用于工业控制系统中;后来发展为以嵌入式CPU为基础、以嵌入式操作系统为核心的嵌入式系统;进入20世纪90年代以后,Internet的应用迅速普及,广泛渗透到社会、经济、交通、通信等相关行业,计算机与通信一体化的趋势日趋明显。基于Internet的嵌入式系统再度成为一个研究热点。在人们的日常生活中,已经普遍使用的手机、PDA、手持设备和掌上电脑等信息电器就是嵌入式系统应用正在迅速发展的一个证明。
面向对象的基本思想就是程序被看作是相互协作的对象集合,每个对象都是某个类的实例,所有的类构成一个通过继承关系相联系的层次结构。程序设计是以对象为中心,以消息为驱动。程序一般由类的定义和类的使用组成。面向对象的建模,就是把系统看作是相互协作的对象。这些对象是结构和行为的封装,都属于某个类。那些类具有某种层次化的结构。系统的所有功能通过对象之间相互发送消息来获得。
面向对象技术有以下优点:
①维护简单。模块化是面向对象编程中的一个特征。实体被表示为类和同一名字空间中具有相同功能的类,可以在名字空间中添加一个类而不会影响该名字空间的其他成员。
②可扩充。面向对象编程从本质上支持扩充性。如果有一个具有某种功能的类,就可以很快地扩充这个类,创建一个具有扩充功能的类。
③代码重用。由于功能是被封装在类中的,并且类是作为一个独立实体而存在的,提供一个标准类库就非常简单。
面向对象的方法克服了原有软件系统规模庞大、研制周期长、维护费用高、软件系统过于复杂、应用软件不易集成等困难。面向对象技术在软件设计当中占有非常重要的地位,但面向对象并不是C++等语言的专利。实际上,在诸如操作系统等系统软件当中,面向对象技术的使用是非常广泛的。利用C等高级语言实现面向对象技术,不仅结构清晰,而且在执行效率等方面也有C++等语言无法比拟的优势。
1 面向对象嵌入式技术分析
1.1 面向对象嵌入式技术现状
目前,面向对象技术在嵌入式系统中的应用虽然有限,但是已经得到了充分的发展。EC++是1996年在日本成立的Embedded C技术委员会针对嵌入式应用制定的减小代码尺寸的C++标准;EC++引人嵌入式系统,使得嵌入式开发和个人计算机、小型机等之间在开发上的差别逐渐消除。软件工程中的很多经验方法乃至库函数可以移植到嵌入式系统。EC++的使用使软硬件开发可以分工,从事嵌入式软件开发不再必须精通系统硬件和相应汇编指令集。相信使用C编程的开发者对这个优点都有感受,而EC++更为突出。
目前,在图形用户界面GUI、Web Server图像处理技术、数据采集等方面已经有着很成熟的面向对象开发模式;采用设备输入输出接口等抽象层,融合网络、驱动等底层操作,抽象成为上层开发的统一接口,提高可移植性和扩展性,方便后期维护和代码重用。
1.2面向对象嵌入式技术的总体设计思想
面向对象嵌入式技术的总体设计思想是所有操作由对象和消息驱动(或者事件驱动)。通过对现有面向对象技术的分析,对多种嵌入式应用系统的开发技术要求进行总结,抽象出各种接口和组件类。各个组件、接口、数据都被设计成为对象。对象之间通过消息通信形成整体,构成系统。在分析和设计的过程中,采用OOA/OOD进行分析设计,形成一个层次清楚、移植性好、易于扩展和重定义的系统结构。
从图1中可以看出,在整个模块与体系结构中面向对象技术的重要作用。
目前,嵌入式系统大都采取分层结构设计,并允许根据需要对不同的层次进行重写和替换。抽象接口是在抽象层定义的,不依赖于任何特殊硬件。所有顶层的操作和输入处理都建立在抽象接口之上。这种分层结构实际上就是一种面向对象的程序结构,目的是将底层实际的不同驱动抽象成对上层的统一接口。进程管理、线程管理、内存管理、设备管理等也可以抽象成为统一的接口,方便嵌入式系统的开发。
采用上述分层方法,使用标准C或者标准C++编写上层的应用程序,把与硬件及操作系统相关的接口完全封装起来,对上层应用程序编写着来讲,完全感觉不到底层的变化。硬件变化或操作系统改变只需将硬件依赖型接口内部改变即可,这样就能满足程序运行于不同操作系统上的需要,并且可以是在不同系统下采用统一的接口。
2 面向对象嵌入式设计与模型的实际应用
数字视频监控系统是以计算机为核心,结合视频处理、通信、网络和存储技术的一种监控系统。数字视频监控系统具有以往传统的电视监控系统等所有的功能,并且在远距离、性能方面相比具有很大的优势。它与计算机相结合,使得异地、远距离监控变得非常方便;与网络、通信的结合,形成更有实用价值、功能更加强大的网络通信管理系统。信息化的时代要求信息的处理随时随地,而数字视频监控系统正是这种特点和趋势的具体体现。
已经实现的SuperVisionl.0为了保证具有良好的灵活性和可扩展性,在开发中使用了许多面向对象技术。根据实际生活以及监控系统的需要,分析数字视频监控系统中可能出现的异常情况,重点在于运动检测,异常报警处理方面的设计,以及整个工程的速度性能的考虑。设计静止物体缓慢变化、光线缓慢变化以及消除噪声和干扰等多种具有不同应用需求的动态检测算法,同时提出不同灵敏度的“阶梯思想”;设计远程控制与本地控制并行处理的机制算法,构建本地的Web服务器,方便用户快捷方便地控制;设计整个监控系统结构整合的算法,保证视频、图像的捕捉,异常监测,报警机制(包括E-Mail、Ftp、电话、纪录备份、Web访问)与记录回放等的协调工作;在内容存储上,采用高效的MPEG-4的压缩算法,图片采用BMF,JPEG的方式,方便运动检测和网络的传输;友好的人机界面提供便利的操作,满足视频监控系统中实时传输、处理和回放等需求。
2.1 系统实现流程及结构分析
目前,流行的嵌入式软件大都是采取分层结构设计的。SuperVision1.O也采用了这种分层的结构设计,并允许根据需要对不同的层次进行重写和替换,抽象接口是在抽象层定义的,不依赖于任何特殊硬件。所有顶层的操作和处理都建立在抽象接口之上。这种分层结构实际上就是一种面向对象的程序结构,目的是将底层实际的不同驱动或者实现抽象成对上层的统一接口。在实现中底层部分主要针对视频采集和压缩算法的接口统一实现,针对不同的驱动和压缩得到统一的上层接口,方便扩展和修改。上层中的报警机制(包括E-Mail、FTP、电话,纪录备份和Web访问)采用对象的特点,把每个报警方法都抽象成为对象,针对每种不同的程序实现统一使用接口。系统流程如图2所示。
报警机制部分主要实现远程控制和实时数据传输部分功能部分功能。
①远程控制:采用Server/Browser结构,使客户端能够在网上任何节点接入,实现客户端发布的零配置,同时实现用户验证机制,确保安全。实现的主要功能包括:开启/停止监控系统的实时报警,实时更新监控图像,获取系统历史记录。
②实时数据传输:提供可调用并且通用的接口函数,由报警子系统调用。通过多种方式把各种实时数据传送出去,包括http、FTP和E-ail。
2.2统一接口实例
试想如果一个城市的消防车去邻近的城市救火,却发现无法和这个城市的消防栓对接,这是多么可怕的灾难?美国人在上个世纪初就有了统一接口的思想,现在再强调这个也不为过。其目的就是实现系统软件中,不修改任何的软件代码,就可以换上其他规格甚至其他厂家的同类型产品。开发人员可以很方便根据统一的接口扩展和移植相关代码。无论如何,美国人的这个近乎异想天开的想法,现在正在慢慢地转变成为现实。没有PC兼容的规范,没有API接口,很难想象微软的软件可以像现在这样大行其道。
该系统的模块设计考虑和采用了统一接口的思想。它接收系统产生的报警消息产生相应的消息队列,对所有的消息进行分类送相应的系统模块进行处理,根据对应的模块类别调用相应的处理方法,并记录处理信息。当工作失败时自动进行相应的事务处理。
视频采集可以基于采集卡的SDK接口函数,也可以基于Microsoft的DirectShow技术开发的音视频讯号捕捉接口,或者基于底层的驱动等方法来实现。采用统一接口的思想可以将各种实现策略抽象成为对上层的统一接口。具体的调用采用面向对象的特点、调用相应的接口实现策略。
CaptureProc重要接口定义如下:
Class CaDtureProc{
String Type; //区别接口类别
b001 mnuStartCapture(); //开始录像
b001 mnuStopCapture(); //停止录像
bool TakePicture(); //捕获图像
bool Setting(); //相关设置选项
Shc)wConfiglareDialog(&.type); //根据类型不同给出不同的设置界面
};
报警机制(包括E-mail、FTP、电话、纪录备份和Web访问)同样可以采用面向对象的特点,把每个报警方法都抽象成为对象,针对每种不同的程序实现统一使用接口,方便代码编写和扩展。在实现中包括Cmail、Cftp、Ctel、Cweb四个类,对应的接口统一定义为启动、设置、关闭等抽象函数。根据用户所设置的参数形式,系统在消息的驱动下,根据定义的具体对象调用相应的方法。将结果和变化输出到指定的设备和存储体中,用户就可以方便及时地得到信息和观察到运行过程和结果。系统设计中除了采用前面提到的设计模式外,还采用了对象树等模式,方便分析整个系统的运行和完善情况。
3 面向对象嵌入式技术的性能研究
当系统的分析与设计采用面向对象方法时,并不意味着所使用的编程语言也一定是面向对象的。事实上,这种分析设计方法的具体实现可以使用任何编程语言(如汇编语言或C语言);但是,在程序设计上要尽可能地使用面向对象的思想,如体现程序结构方面的封装性、消息传递等。这样才会使程序结构清晰,便于应付随着需求变化而产生的不断更新和系统维护。
过去嵌入式系统分析和设计方面的主要问题为:①分析设计没有一个统一的标准;②分析设计方法不统一;③从分析设计到制作和编程没有一个始终一贯的工程化方法,使得产品形成的每一个过程人为因素影响十分严重;④分析设计的成果不能被开发类似项目或产品时重用。以上4个方面的问题成为多年来制约嵌入式系统发展的主要瓶颈,使得大部分从事嵌入式系统应用开发的组织和团体,基本上是采用小组甚至是作坊式的运作模式。这样,开发较复杂或大型系统的工作变得十分困难甚至无法进行,或因为系统需求的不断变化或小组成员的流动导致项目失败。目前,面向对象技术正是建立在对真实世界抽象思维的基础上,面向对象的嵌入式系统建模同任何软件密集型系统建模一样,从系统中的类建模开始。为了解类的结构,首先对系统工作过程作一个总体陈述,对嵌入式系统需求、分析、设计、制作、测试和维护过程的结构特征和行为特征统一的工程化描述方法,改变以往的嵌入式软件开发现状。
SuperVisionl.0采用了面向对象设计方法,因为嵌入式开发中硬件条件的限制,相对于PC机上的面向对象编程有更多的困难,下面就探讨一下在嵌入式开发中的OOP的难点和解决方法。面向对象编程需要更多的运行时间和资源需求,如果不采用面向对象编程,则面临嵌入式开发中的代码数量、复杂度越来越高带来的维护效率下降的问题。
从图3可以看出C++语法的概况。
底层的代码在面向对象编译器中使用时并没有更高额的代价损耗,因此,在嵌人式开发时可以不使用资源代价比较高的而又不是很重要的部分,而是采用底层的代码实现,或者改善面向对象的编译器,变相利用底层的优点弥补面向对象程序设计的缺陷。这样嵌入式系统在性能优势和程序方便性、可维护性、可移植性上能够得到统一。
4 结论和展望
采用面向对象思想和嵌入式软件特点相结合,在综合运用,如多级抽象类型定义,不依靠具体程序设计语言的更高抽象层次上,对对象进行抽象描述,隐藏具体实现细节,使程序结构易于扩充,缩短开发周期。目前这种方法还处于发展阶段,各种新的领域仍在不断的出现,原有的方法也在不断的检验和改进,面向对象的嵌入式开发技术的重要意义已经不容置疑,摆脱了以往结构化范式的影响。面向对象嵌入式开发技术在SuperVisionl.0系统中得到验证,并根据具体的面向对象编程的性能特点调整资源分配策略。
从目前国内外IT行业来看,嵌入式系统及其产品将在Internet衍生出来的新型市场中起到重要的作用,后PC时代带来的冲击将是未来市场的新景观。