引言
嵌入式系统是指以应用为中心,以计算机技术为基础,软硬件可裁剪,适应应用环境对功能、实时性、可靠性、成本、体积、功耗等严格约束的专用计算机系统[1]。嵌入式系统是先进的计算机技术、网络通信技术、控制理论、半导体技术和现代电子技术与各行业具体应用相结合的产物。随着技术的发展,以及嵌入式应用的不断增长,嵌入式系统需求的复杂性、不确定性在不断提高,系统规模也在逐步地扩大,而产品研发周期却越来越短,这给嵌入式应用软件的开发带来了新的挑战。
统一建模语言(Unified Modeling Language,UML)是一种绘制软件蓝图的标准语言,可以用UML对软件密集型系统的制品进行可视化、详述、构造和文档化[2]。 UML已成为复杂系统建模的工业标准,并可借助代码自动生成工具实现从分析到编码的开发过程自动化。对象管理组织(Object Management Group, OMG)推出的UML2.0版本,致力于推动模型驱动架构(Model Driven Architecture, MDA)系统开发模式,以强化实时嵌入式系统开发的设计与管理,并提升系统质量。本文将从嵌入式系统特点的角度出发,讨论UML在嵌入式系统开发中的研究与应用,以秒表系统为例阐述UML应用于嵌入式系统的开发过程。
1 嵌入式系统的特性及开发中的关键问题
同其他通用计算机系统相比,嵌入式系统的主要特性以及针对这些特性开发系统时必须解决的关键问题如下[3]:
实时性(realtime)。实时性是嵌入式系统的本质特性,系统必须在可预知的短时间内对外界事件做出处理与响应。数据延迟会导致计算错误甚至系统失败,系统必须满足实时性要求,这使得设计必须准确描述系统的时间特性。
并发性(concurrency)。在嵌入式系统中往往存在多个任务甚至多个处理器同时运行。多任务和多处理器的通信、调度以及资源共享和优先级管理等问题处理不好,将影响整个系统的确定性、安全性和可靠性等性能。
分布性(distribution),嵌入式系统越来越多地向网络化发展。一个应用可以由分布在网络上的不同结点共同实现,结点间存在交互与通信,尤其当通信频繁、过程复杂、通信量大时,必须处理好结点间的协调操作。
图1 嵌入式系统组成结构
软硬件紧密结合(hardware closeness)。嵌入式系统一般组成结构如图1所示,软硬件一体共同实现系统功能。软件计算系统和硬件物理系统的建模和验证技术一直沿着不同的路径发展,嵌入式系统的开发则要求这些技术的全面集成。
高可靠性(high reliability)。许多嵌入式系统运行失败将导致不可估量的损失,因此对系统的健壮性和安全性提出很高要求。传统的原型化方法和模拟执行方法己经不能满足或不适应这些系统的开发,系统实现前应该经过严格验证以保证设计的可靠性。
2 使用UML开发嵌入式系统
2.1 UML概述
UML是一种基于图形的语言,具有较高的抽象性及严格的语义,包括若干种形式化与非形式化的图形,用于描述系统的静态结构和动态行为。其中用例图可以对需求分析进行规格化说明,类图、组件图、配置图可以描述系统的静态结构,而顺序图、协作图、活动图及状态图可以描述系统的动态行为。在利用UML建模过程中,可根据开发过程不同阶段的具体要求,选择不同的图形描述系统的各种静态结构模型或动态行为模型[4]。
2.2 使用UML开发嵌入式系统的可行性
针对嵌入式系统的特性及开发系统需要解决的关键问题,下面讨论使用UML开发嵌入式系统的可行性。
2.2.1 时间约束描述
实时性是嵌入式系统的基本特性,嵌入式系统建模需要描述系统的时间特征,也称为时间约束,包括传输时间、执行时间、周期、延时、时限等。时间约束分为两类:某事件在一个确定的时限内发生;某事件在一个确定的时延后发生。
UML的顺序图描述对象的交互过程,其最基本的元素是时间,因而可以对系统的时间和时间约束信息进行定性描述。另外,也可以定义时钟版型和超时事件版型在状态图中对时间和时间约束信息进行定量描述。
2.2.2 并发任务描述
嵌入式系统的并发任务可以由UML类图来描述,主动对象具有一个控制线程,可与其他主动对象并发执行,对象之间的通信通过同步调用事件或异步信号事件实现。构造型task表示系统的并发任务,内部包含状态机,实现时直接映射为RTOS(RealTime Operating System)的任务或线程。构造型gate表示任务之间的通信接口,负责接收任务的输入数据,一个任务最多有一个通信接口。任务之间通过关联连接,具有确定的关系,如并发、顺序、同步、异步、创建、删除等。
2.2.3 分布性描述
大型嵌入式实时系统可能分布于多个处理器上,使用UML对其建模时,必须考虑处于不同处理器上任务之间的协调,引导过程的管理,以及跨处理器通信的细节问题。构造这样的系统最有利的选择是使用大规模的架构抽象(如构件和子系统),作为一种分解系统的方法,也作为控制其复杂性的方法。
2.2.4 软硬件整合设计
由于UML也能建立硬件系统的模型,在模型设计阶段,软件和硬件设计者共同合作一起思考整体架构,采用组件化设计,软件设计者充分考虑硬件的可变性,以更好的设计模式支持硬件组件的可调换性,达到软硬件整合设计的目的[5]。
2.2.5 可靠性描述
可靠性是系统正常运行时间或者可用性的度量,特别地,它指的是一次估算在系统失效之前能成功完成的概率。可靠性通常是用平均故障间隔时间(MTBF)来估计的。通过增加MTBF来减少系统的故障时间能够提高可靠性。冗余是一种增强系统可用性的设计方法。因为如果一个元件失效,另外的元件可以将其替代。采用架构设计模式可以识别冗余并将其表示出来[6]。
3 应用举例
这里以秒表为例,说明如何在嵌入式系统开发中使用UML。开发工具是IBM公司的Telelogic Rhapsody V7.4。Rhapsody是一种支持实时UML标准的嵌入式系统软件工具,它基于内置的OXF框架(Object Execution Framework)实现从系统的分析、设计到代码自动生成的开发过程自动化。本实例在纯C环境下开发。
3.1 系统概述
秒表的计时功能由两个按钮控制,按下RUN/PAUSE按钮计时开始,计时时间过后按下该按钮计时暂停,秒表显示计时耗用时间,再次按下RUN/PAUSE按钮,秒表从显示的时间开始继续计时。按下RESET按钮时计时归零。
秒表系统包括两个用户接口:RUN/PAUSE和RESET按键输入,以及一个显示器。按键输入决定了计时器的状态——RESET、RUN、HOLDING,显示器显示计时的分和秒。对秒表建立的模型包括一个显示器用来显示时间,一个计时器用来计算时间。该模型还包括一个计数函数用来处理时钟周期并根据用户的输入改变计时器状态。
秒表系统的用例图如图2所示。
图2 秒表系统用例图
3.2 静态结构
对象图描述参与交互的各个对象在交互过程中某一时刻的状态。如图3所示,显示的是秒表系统的对象模型图。通过分析用例,秒表系统可以分解为两个对象,即Display和Timer。计时器Timer计算时间,显示器Display则显示Timer的分钟和秒钟。
图3 秒表系统对象图
3.3 动态模型
3.3.1 状态图
图4 Timer状态图
状态图描述了对象的内部行为,反映了当事件发生时,对象的状态是如何变化的。如图4所示,显示的是Timer对象的状态图。Timer根据两个事件evReset和evToggle来切换计时器的on和off状态,evReset是由用户按下RESET按钮引发的事件,evToggle是由用户按下RUN/PAUSE引发的事件。tm(1000)是Rhapsody工具提供的计时器,表示每1000 ms计时一次,tick()实现秒向分的进位,即每60 s分钟数加1,show(mins,secs)则显示计时的分和秒。
3.3.2 顺序图
顺序图描述对象间传送消息的时间顺序,它用来表示用例中的行为顺序。如图5所示,显示的是秒表系统的顺序图。用户按下RUN/PAUSE按钮时,事件evToggle触发,计时器Timer开始计时,系统每计时1 s,计时器Timer消息tick()被触发,并发送消息show(mins,secs)给显示器Display以显示时间分和秒。用户按下RESET按钮时,事件evToggle触发,计时器清零,再按下RUN/PAUSE按钮时,计时重新开始。
图5 秒表系统的顺序图
结语
嵌入式系统应用的开发越来越复杂,因此有必要对嵌入式项目实施严格的软件工程管理。UML作为一种标准建模语言,广泛应用于信息系统的开发,将UML应用到嵌入式系统开发中,采用MDA系统开发模式,强化了系统开发的设计与管理,并提升了系统质量。使用Rhapsody开发工具可以根据基于UML建立的系统结构模型和行为模型自动生成软件代码,基于OXF框架自动生成的软件模块具有更好的复用性并且便于系统测试,极大地提高了嵌入式软件的开发效率和可维护性。