嵌入式技术是计算机发展的趋势之一,被广泛应用于工业和军事领域。SCADE(高安全性的应用程序开发环境)为嵌入式软件提供了一套基于模型的开发方式。从嵌入式软件的特点入手,对基于模型的嵌入式系统软件开发技术进行了深入剖析,并给出了一个基于SCADE的开发实例。
1.引言
随着嵌入式应用技术的发展,嵌入式系统被广泛应用于人们生活的各个方面。大量功能强大而价格便宜的通用嵌入式硬件随之出现在市场上。而如何能够在通用硬件平台上,高效的开发出满足安全性与可靠性需要的专用嵌入式软件成为了制约嵌入式技术应用的瓶颈。在计算机领域,如何为软件的工业化大生产创造必要的技术条件和设计模式一直是软件工程研究的首要问题。无论是软件工程领域出现过的计算机辅助软件工程的热潮,还是,基于面向对象技术和组件技术的“装配重用”软件思路,都有一些根本性的问题没有得到解决,因此大规模的“装配”软件生产还处在一个理想阶段。
随着研究的深入,用模型化。组件化的方法定义并开发软件及其系统的思想引起了人们的兴趣,也提供了一种新的软件工业化大生产的可能性。在这方面,嵌入式软件由于其本身的特殊性走在了通用软件(PC机用软件)的前面。
2.SCADE软件开发环境简介
SCADE(Safety-Critical Application Develop-ment
Environment)高安全性的应用程序开发环境,是法国Esterel Technologies公司研制的一个用于开发达到欧洲航空业DO一178B标准的嵌入式软件的完整工具包。它针对嵌入式软件的特点,运用了正确构建(Correct
by Construction)的概念,提出了一种基于模型的图形化开发方式,覆盖了从需求分析到代码实现的整个软件开发流程。
SCADE开发环境提供的一系列开发工具,实现了直观的图形化需求建模功能,基于模型的仿真验证和软件测试功能,以及基于模型的标准C代码和开发文档的自动生成功能。其严谨的建模理论和经过高安全性验证的代码生成器KCG,保证了软件需求和代码产品的高度同步。
SCADE开发环境的出现,使软件设计工作可以集中在需求建模的层面,为基于模型的软件开发方法提供了载体。
3.基于SCADE的嵌入式软件开发理论基础
根据嵌入式系统的特点,SCADE提出了反应式系统。确定性。同步假设。并发性四个关键概念,从嵌入式系统的本质特征出发,极大的简化了系统设计的考虑,为基于模型的开发方式提供了理论基础。
3.1反应式系统
反应式(Reactive system)系统是指在运行过程中,不停的和外部环境交换信息,以外部环境的输入信息为主导,进行特定的计算和输出的嵌人式系统。
反应式系统的工作方式是一个“输入一计算一输出”的连续循环过程。反应式系统一般还兼具实时性和周期性,广泛应用于工业领域的嵌入式系统大都属于这种系统。反应式系统的工作方式如图1所示。
反应式系统的概念,把嵌入式系统简化为一个能不断接收输入,并计算输出的黑盒,为嵌人式系统的需求建模提供了基本模型。
3.2确定性
一个系统,如果使用相同的一组输入序列,在相同的时间调度下,其反应情况相同,始终产生相同的一组输出,那么它就是确定的。确定性提高了系统的安全性,是大多数嵌入式软件的重要需求,在航空航天等高科技领域,这也是一个必要条件。‘确定性的要求降低了系统设计的复杂度,简化了系统建模和仿真验证的考虑。SCADE开发环境提供的各种机制确保了系统的确定性,开发者不能引入不确定性。
3.3同步假设
同步假设(synchrony hypothesis)是假设反应式系统的处理速度无限快,即系统在一个可以忽略不计的瞬间响应输入,并产生输出。这样,任何两次响应之间都不会重叠,每一次输出都会在下一次输人前完成。
相对于通用软件的设计,时间是嵌入式系统设计必须考虑的一个因素,而嵌入式软件的运行时间又是与硬件环境息息相关的。为了简化系统设计,SCADE提出了同步假设概念,把物理时间从系统设计中剥离出来。一方面确保了系统的实时性,另一方面也体现了设计的平台无关性。
同时,为了考虑系统的运算时间问题,SCADE通过基本指令步长将实际的物理时间离散成指令周期时间,从而产生了逻辑时间。这样,就可以使用逻辑时间来代替物理时间,给出运算时间的参考值。
3.4并发性
并发性概念认为系统所有输入都是并发的,系统运算模块按照数据流动执行,而且根据同步假设,所有模块的运行都是在可以忽略不计的时间内完成的。其中,没有输入输出关系的模块都是并发执行的,有输入输出关系的模块是按照输入输出关系顺序执行的。
并发性概念进一步简化了系统设计的复杂度,也为系统仿真提供了一种简化的“运行”方式。
4.基于SCADE的嵌入式软件开发关键技术
4.1建模机制
基于模型的开发流程,其基础就是模型描述问题,也就是寻找一种合适的形式来描述系统。
根据嵌入式软件的特点,可以把其划分为接口和功能模块两部分,功能模块部分由连续控制部分与状态逻辑部分组成,其输人输出端分别为传感器和执行器。嵌入式软件的一般结构如图2所示。
针对这种划分,SCADE提供了两套图形化的建模机制:数据流图和有限状态机。对应嵌入式软件结构的划分,数据流图模型可以用来表示连续控制部分,主要包括传感器采样。信号处理。复杂的数学逻辑计算。实现各种算法等功能;有限状态机模型可以用来表示状态逻辑部分,主要包括各种系统状态的迁移和工作模式的变化等功能。
这是一种已被证实为有效并广泛使用的嵌入式软件建模方式之一,能够简单有效的描述嵌入式系统。
4.2需求建模
一个复杂的嵌入式系统的需求建模过程,是一项系统的设计工作,一般有自顶向下和自底向上两种设计方式:
自顶向下的设计方式是一种从抽象到具体的过程。它首先需要根据系统的接口需求,建立系统的黑盒模型;然后根据系统的功能需求,对系统进行模块划分,并层层细化,直至最低层的功能单元;最后是功能单元的实现工作。
自底向上的设计方式是一种从具体到抽象的过程。它根据系统的功能需求,首先实现的是底层的各个功能模块,然后根据各模块之间的接口定义,层层组合,最后形成整个系统模型。
这两种设计方式在实际使用中各有优劣,可以根据具体需要组合使用。
同时,SCADE的建模方式也可以被认为是一种基于组件的开发方式。一个功能独立,接口明确构功能算法模型就类似于一个封装好的组件,可以直接通过接口调用。而SCADE软件开发环境的高安全性限制和平台无关性,保证了模型的通用性和重用价值。这样,基于成熟算法模型的封装与重用,可以使软件开发变成模型组件的“装配”,极大的提高软件生产效率,也减少了引人错误的可能。
4.3模型验证手段
基于严密的建模理论,SCADE提供了一系列基于模型的验证手段,使模型检查。系统调试和仿真验证工作都可以在模型层面上完成。其中主要有以下几项:
(1)静态检查,检查模型设计是否有静态语意。语法错误;
(2)模拟仿真,根据算法设计测试用例,通过仿真器模拟接口输入输出,直接“执行”模型来实现仿真的功能;
(3)形式验证,根据需求设计的安全特性,通过尝试在逻辑上寻找反例来检查模型的安全性;
(4)系统原型仿真,通过与其他设计工具的桥接,可以实现系统与模拟外部环境模型的连接运行,方便测试和需求验证。
对于一个系统模型的验证工作,一般是按照自底向上的顺序进行的。首先要对底层功能模块进行验证,由于其结构和接口最为简单,所以最易于调试。在所有组成模块都经过充分验证的基础上,可以继续进行上一层模型的验证工作,并一步步的递推至最顶层的系统模型。
4.4代码自动生成
SCADE基于严格的数学理论和一套形式化方法,能够确保其代码和模型的完全一致,并满足一系列的安全性特征,是完全面向工程的产品代码。
SCADE的代码生成过程提供了多种设置以满足各种需求,需要根据实际使用需要进行配置,一般情况下其产品可以直接嵌人到产品中去而不需要做任何修改。
5.开发实例
依据上述开发技术,实例构建某型号制导炸弹飞控软件的制导控制模块,来实践基于模型的嵌人式软件开发流程。
5.1开发流程
基于SCADE的嵌入式软件开发流程,主要工作集中在建模层面,其流程如图3所示。
5.2需求分析软件需求规格描述如下:
(1)需要实现的功能:此模块为计算功能模块,主要根据惯性系下比例导引指令。弹目相对位置和弹体姿态计算弹体需要实现的过载指令。
(2)输入:惯性系下比例导引指令。弹目相对位置。炸弹姿态。
(3)输出:弹体导引指令。
5.3需求建模
需求建模可以分为概要设计阶段和详细设计阶段。概要设计阶段的主要工作是建立系统模型和模块分层细化;详细设计阶段的主要工作是完成具体模块设计。
在这个例子中,根据算法所要实现的功能首先定义了
整个系统的输入输出变量,然后建立系统的黑盒模型,如图4所示。
下面根据模块功能,对系统模型进行了进一步划分,主要分为以下几个模块:
(1)飞行状态条件计算模块Condition.其输人为弹体姿态和弹目相对位置信息,以及两个常数参数,输出为三个飞行状态变化的条件。
(2)飞行状态判断模块Fly-State.其输人为三个状态变化条件变量,输出为三种状态标志。
(3)导引指令坐标系转换模块Transition.其输入为弹体姿态和惯性系下比例导引指令,输出为弹体系下比例导引指令。
(4)过载计算模块Acceleration.其输入为三个飞行状态标志,弹体速度。攻角信息,弹体系下的比例导引指令,以及一个常数参数,输出为弹体过载指令。
(5)过载限幅模块Alimit.其输入为弹体过载指令,输出为限幅后的弹体过载指令。
其中Condition.Acceleration.Transition和Alimit是功能计算模块,用数据流图建模;Fly-State是状态计算模块,用有限状态机建模。系统模型图如图5所示。
图6为飞行状态计算模块Fly-State的模型,其中共包含3个状态,分别为初始状态(Istate),转弯状态(Tstate)和俯冲状态(Astate)。根据三个输入的布尔量条件可以进行状态变化。其中的状态变化都是单向不可反复的,变化方向和线条箭头方向一致。
5.4模型验证和算法调试
完成模型设计后,需要使用SCADE提供的一系列检查验证手段来确保模型的正确性和安全性。对于发现的问题,可以在直观的图形化模型上进行模型修改和参数调试。
使用模拟仿真工具,可以通过设计各种测试用例来模拟可能出现的实际情况,对模型进行仿真调试。可以从控制算法角度和软件工程角度对模型进行优化,以达到满足设计需求的目的。
5.5代码集成
在代码集成阶段,根据实际需要,按照效率优先原则进行了配置并自动生成了标准C代码。然后对使用了SCADE自动生成代码的软件进行仿真,其仿真结果与模型仿真的结果一致,满足设计需求。
6.结束语
SCADE软件开发环境的出现,提供了一种基于模型的高安全性嵌入式软件解决方案,使嵌入式软件的开发效率大大提高。同时由于使用了基于模型的设计流程和高度自动化的开发进程,研制工作的重心集中在建模层面,把软件设计人员从繁复的编码和验证工作中解放出来,能够把大量的精力投入到算法设计和建模工作中,这对于嵌入式软件的工程开发有着重要的意义。 |