基于组件的嵌入式软件开发方法研究

时间:2022-09-03 06:54:34

基于组件的嵌入式软件开发方法研究

摘要: 为提高嵌入式系统软件的通用性和重用性,缩短同类软件的开发周期,从嵌入式系统的特点出发,提出一种基于可重用组件的嵌入式软件开发方法。首先介绍组件的基本概念,然后着重阐述嵌入式系统组件划分方法及设计具体组件接口的一般原则。最后通过对比传统嵌入式系统和基于组件的嵌入式系统软件开发方法的异同,提炼出基于组件的嵌入式软件开发方法的特点。具体项目实践证明该方法的可行性,具有良好的应用前景。

关键词: 嵌入式系统;软件重用;组件;接口设计

0 引言

目前嵌入式电子产品发展日新月异,更新换代很快,软件代码量和复杂度随着功能的复杂性呈几何级的增加。在这种情况下,传统的基于先前基础代码进行二次开发变的愈发困难。倘若原来程序员离去,其他人员或新手修改源程序则变的愈加困难和不可控。另外由于绝大多数程序内部结构之间相互耦合,即使只对源代码的很小一部分进行修改,为了保证产品的质量,也应该对整个产品的源代码进行回归测试。在这种开发模式下,程序的可重用性低,整个产品的软件开发和测试周期长,软件成本高。因此寻求一种新的可重用可扩展的软件开发方法是解决这些问题的根本途径。

针对这些问题,本文从嵌入式软件开发的特点和需求出发,提出了一种新的基于可重用组件的软件开发方法,并在实践中取得了较好的效果。

1 组件概述

软件组件(Component)的概念共生于软件重用。早在1968年,在北大西洋公约组织(NATO)会议上就提出了软件重用的概念,后来还为此制定了一整套软件重用的指导性标准,其中包含了利用标准组件实现软件重用的基本思路。也是在这次会议上,Mcllroy提出了软件组件、组件工厂等概念[1]。

基于组件的软件重用是产品重用的主要形式,软件组件技术是当前重用研究的焦点。组件技术的基本思想在于,创建和利用可重用的软件组件来解决应用软件的开发问题。与面向对象编程语言不同,组件技术是一种更高层次的对象技术。它独立于语言,只面向应用程序,只规定组件的外在表现,而不关心其实现方法。

目前关于组件还没有一个统一的定义,以下是关于组件的一些有代表性的观点[2]:

1)组件是一个独立的可传递的操作的集合;

2)组件是由对象类组合起来的物理意义上的包;

3)组件是软件开发过程中一个可替换的软件单元,它封装了设计决策,并作为一个大单元的一部分和其他组件组合起来;

4)组件是具有特定功能,能够跨越进程的边界实现网络、语言、应用程序、开发工具和操作系统的“即插即用”的独立对象;

5)组件是指应用系统中可以明确辨识的构成成分。而可重用组件是指具有相对独立的功能和可重用价值的组件。

关于组件的定义可以从狭义和广义两方面来理解。从狭义上来说,软件组件是指软件系统中具有相对独立功能、可以明确辨识、接口由契约指定、和语境有明显依赖关系、可独立部署、且多由第三方提供的可组装的软件实体。它既包括以EJB,COM/DCOM,ActiveX,Web Services等形式存在的可运行二进制程序,也包括经过封装的源代码程序。从广义上来说,随着对软件重用理解的不断深入,软件组件概念的外延在不断扩展,从组件实体到规格需求、系统架构、设计文档、测试用例等各种具有重用价值的软件资源都是组件的组成部分。

2 嵌入式系统组件架构

根据IEEE的定义,嵌入式系统是“控制、监视或者辅助装置、机器和设备运行的装置”,从中可以看出嵌入式系统是软件和硬件的综合体。另外由于嵌入式系统涉及的领域很广,各个不同领域的应用往往差别很大。因此不同领域应该针对本领域特定应用来开发组件,应用组件构建自己的应用系统。开发出来的组件可以在本领域的不同型号产品间广泛重用。本文选取温度控制器作为应用对象来进行说明基于组件的嵌入式软件开发方法。所谓的温度控制器简单来说就是在暖通系统中通过控制压缩机的开关来达到精确控制温度的装置。具体来说,温度控制器定期测量环境温度,通过其温度算法将环境温度和该时间段的设定温度进行对比决定何时应开启或关闭压缩机使环境温度能迅速而平缓的达到设定温度而又不会产生温度的过冲,始终给用户舒适的感受。用户在任何时候也可对实时时钟和各个不同的时间段的温度设置点进行编辑或设定,并使其应用到温度算法中。另外点式或段式显示屏可以给用户显示环境温度、设定温度、时钟信息、电源状态等信息。

组件是软件系统中具有相对独立功能的软件实体,合理的划分组件,有利于组件的复用和实现,以及系统的配置管理。组件粒度越大,其复用程度就越高,但实现和理解组件就相对困难,重用难度加大;粒度越小,组件越易于复用,但管理组件等代价将增大,甚至大于复用带来的好处。划分组件时应从功能模块的完整性、高内聚和低耦合性等方面出发。依据重用原则、闭包原则、单人组件原则、消息传递原则[3],将通用温控器组件划分如图1所示(虚线框内为可重用组件)。

3 嵌入式组件接口设计

组件划分后需要进行接口设计,它是组件设计的重要部分。一个组件接口是一组逻辑上相互关联的操作,这些操作定义了某类公共行为。接口是一组操作的规范,而非任何特定的实现。接口和具体实现的分离,使其具有较高的抽象性,提高了系统的复用能力,有利于系统的维护和扩充。接口设计要兼顾简单和实用性。组件的内部细节不应反映到接口中。接口与内部实现细节的隔离程度越高,组件发生变化对接口的影响就越小。原则上组件的接口应该是不变的,一旦被发表,它们就不能被修改。也就是说,一旦组件使用者通过某接口获得某项服务,则总可以从这个接口获得此项服务。因此,组件封装后,只能通过已定义的接口来提供合理的、一致的服务。这种接口定义的稳定性使客户应用开发者能构造出坚固的应用。当一个组件需要提供新的服务,可通过增加新的接口来完成,不会影响原接口已存在的用户。

嵌入式组件接口设计应在遵循上述原则的基础上同时考虑嵌入式系统自身的特点:软件与硬件的结合。对于需要硬件提供支持的组件,应分析底层硬件对组件的作用并进行抽象和提炼,通过设计通用且与硬件环境无关的接口将组件与具体硬件平台隔离。此外,在设计组件的过程中还应认真分析哪些组件功能的实现需要用户的设置或调用,哪些功能可以提供给用户使用,然后按照简单实用的原则去设计相应的接口。以温度控制器的实时时钟组件为例加以说明。实时时钟组件的主要功能是提供实时更新的时间信息供其它组件或应用系统使用,其组件接口设计如图2所示。

对实时时钟组件接口图进行简单说明:首先为了维持实时时钟时间的准确性以及确保组件内部相应标志的及时更新,组件需要外部提供一个秒驱动。至于该驱动是来自秒中断还是来自某个每秒钟运行一次的线程等等,组件设计时并不关心,只提供一个RTC_tick接口供外部调用。各个不同应用根据各自应用的具体情况,只需确保在合适的地方每秒钟调用RTC_tick接口一次即可。通过这种方式有效隔离了组件与具体硬件平台的关联。另外由于需要在正常运行组件之前对组件的初始时间及供组件使用的标志等置正确的初始值,用户需在使用组件功能之前调用接口函数RTC_init。完成以上两个接口函数的正确使用后,用户就可以很方便的通过接口RTC_proc实现相应的功能。其中RTC_proc接口函数有两个参数。第一个参数为枚举型变量,列举了接口提供的功能,包括获取时间、设置时间、获取星期信息等,第二个参数是一个实时时间类型的结构体,当需要设置或者获取信息时均可通过该参数实现。

所有接口函数的定义及使用方法均应在组件接口设计文档中详细描述。

4 基于组件的嵌入式软件开发流程

4.1 传统的嵌入式软件开发流程

传统的嵌入式软件一般采取瀑布模型进行开发,其基本流程如图3。在这种模式下,每个应用系统的开发总是从头开始,开发过程涉及大量的重复劳动,包括用户需求获取的重复、需求分析设计的重复、编码实现的重复、测试及文档工作的重复。

4.2 基于组件的嵌入式软件开发流程

基于组件的嵌入式软件开发是把传统的软件编码工作转换为以组件为基础的系统集成组装。应用系统的开发不再采用一切“从零开始”的模式,充分利用过去应用开发中积累的知识和经验,只需重点关注每个应用的特殊性,其一般开发过程可描述如图4。对于特定领域的嵌入式系统,通过分析该领域内不同应用系统,抽取出其领域共性,并以此为基础开发出功能相对独立的组件构成组件仓库。当需要开发新的应用系统时,只需从组件仓库中提取出满足其功能需求的相应组件进行组装。对于现有组件仓库未覆盖的功能,应深入分析这些功能是否可能成为新的通用功能。如果是则应该按照组件的完整开发流程将这些功能开发成新的组件并丰富现有组件仓库。反之如果新的功能只是为特定应用系统所特有,不具备通用性,则只需针对该应用系统来开发这些功能。

5 结论

本文介绍的基于组件的嵌入式软件开发方法已成功应用于某新型温度控制器的项目开发过程中,取得了很好的效果。虽然在开发各个功能组件阶段花费的时间、精力要多一些,但这些组件在后期的项目中得到重用,大大提高了项目开发效率,大幅度降低了开发成本,并使整个项目的质量得到了更好的保证。并且当项目需求发生变动,只需对相应的组件进行升级,而不会影响系统的其他部分。另外,基于该方法可以很好的实现项目的并行开发。因此基于组件的嵌入式软件开发方法为嵌入式软件开发提供了一种很好的思路,具有光明的应用前景。

参考文献:

[1]杨芙清、梅宏、李克勤,软件复用与软件构件技术[J].电子学报,1999(2):68-76.

[2]左爱群、黄水松,基于组件的软件开发方法研究[J].计算机应用,1998,11(18).

[3]蔡福喜、黄大贵,基于模块化设计思想的测控系统框架设计[J].测控技术,2009,28(1):55-61.

作者简介:

郑久寿(1983-),男,安徽安庆人,硕士研究生,助理工程师,主要从事计算机容错技术及软件工程方向的研究;夏德天(1980-),男,安徽芜湖人,大学本科,工程师,主要从事计算机容错技术方向研究;何小亚(1986-),男,湖南衡阳人,硕士研究生,助理工程师,主要从事计算机航

上一篇:拓片保护利用措施初探 下一篇:把简单的事情做到极致就是境界