嵌入式软件模型化开发
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
嵌入式软件模型化开发
随着现今社会的进步和发展,嵌入式系统开发经逐步面临着市场需求多样性与开发实现快速性之间的矛盾。
然而传统的嵌入式系统开发模式,从需求分析、设计、实现到测试的顺序开发过程中由于开发环节较多、中间文档较多,常导致各开发环节之间的衔接存在很大的不确定性和潜在的遗漏危机,一旦在最终实现和测试阶段出现了明显的错误或是需求不满足的情况,则无法进行跨越阶段的重复设计,只能从头开始设计和实现,这样将无法满足市场对产品开发周期的快速性需求,使嵌入式系统开发陷入设计瓶颈。
目前,依靠手工编程的设计流程已经很难胜任新的开发需求,而且通过手工编写的代码容易产生程序缺陷。
查找和解决这些问题不仅要花费大量的人力和时间,有时甚至会导致软件的重新开发。
特别是在对安全系数要求较高产品上,出现程序缺陷会直接关系到人身安全。
因此,近几年汽车电子行业的一些龙头企业已经通过代码自动生成的方法逐步取代了传统开发模式下的手工编程,收到了良好的效果[1],这就是模型化的嵌入式软件开发方法。
一、基于模型的设计方法
1.1基于模型设计思想简介
基于模型的设计(Model Based Design),就是在系统的设计过程之中,所有信息传递、工作的核心与基础都是若干模型,所有工程师都利用同一的模型完成自己关注的开发任务。
如今基于模型的设计思想已经被大家广泛的认可,基于模型的设计流程使用的是框图化开发环境,系统开发工程师在这个环境中构建嵌入式系统的可执行模型。
1.2 传统设计方法与基于模型设计方法的对比
1 传统设计方法的缺陷
传统的开发手段是自顶向下、逐步细化的“瀑布式”开发手段,如图1所示。
图1嵌入式系统传统设计方法
在传统的设计过程中,不同类型的工程师彼此交换自己的设计成果,逐步细化设计任务,直到完成最后的产品。
这种自顶向下的开发流程具有快速便捷、易于实现的特点。
但是,随着嵌入式系统本身复杂程度的增加以及设计研发周期缩短和市场的压力等诸多原因,传统的设计开发手段逐渐暴露出许多问题。
首先在传统的开发手段中,在不同阶段彼此之间传递的信息需要依赖文档,例如需求分析报告、系统详细设计规范、设计任务书、设计报告等。
由于工程人员总会存在针对文字理解的二义性问题,因此即便是文档本身没有错误,可能也会由于理解上的误差而引起系统设计、实现的错误。
其次,由于设计的嵌入式软件算法需要有专门的硬件生产出来之后才能够进行测试,因此,一些设计错误要在软/硬件产品都具备之后才能够进行集成与测试。
但是这时发现错误就很难找出错误的原因,既有可能需要重新编写软件,甚至由于产品的更新换代造成整个计划的取消[2]。
这个问题很难从根本上避免。
在传统的设计手段中,整个程序都是利用手工编写的。
使得系统的开发必须面对程序缺陷不断严重的现实,甚至程序缺陷还未解决,产品就已经更新换代。
再次,无法做到所有开发人员都有同样的责任心,无法避免开发人员出错的可能性,最系统维护时也会遇到很大的困难。
2 基于模型设计方法的优势
在基于模型的系统设计过程中,执行不同设计任务的工程师彼此在统一的环境下完成开发工作,在他们之间传递的不仅仅是设计文档,还包含系统模型。
当需要具体实现产品或者进行集成测试时,只要通过自动代码生成就可以迅速地完成代码生成、硬件实时仿真与测试,避免了大量的手写代码工作。
这种方法主要解决了传统设计手段中手写规范文档、测试工作在后期阶段的主要问题。
模型工具选择Mathworks 公司推出的Simulink/Stateflow 可视化建模环境,为嵌入式系统的控制逻辑关系提供了一个平台及开发流程。
通过加入可视化图形设计、快速原型化、迭代设计、系统仿真等众多新的元素,并在传统的顺序开发基础上提出了基于模型的设计流程和V 字型软件开发模式,如图2所示。
图2 基于模型设计的控制系统开发流程
图2是基于模型设计的控制系统开发流程,其符合经典V型控制系统开发流程的各个阶段。
首先根据客户需求分析,利用Simulink及Stateflow工具进行目标模型和控制算法的初步建立。
建立模型后,在Simulink环境下对目标模型及控制算法进行离线仿真测试,测试通过后利用RTWEC工具箱自动对控制逻辑生成代码。
然后手工编写或用微控制器自带的工具生成与微控制器直接相关的底层控制驱动代码,经过规范有效的代码整合,供相应微处理器下载使用[3]。
接下来就可以用下载了目标程序的ECU,利用硬件在环实时仿真环境,进行软件(ECU)在环测试,为实车测试做准备。
最终实现产品开发,完成嵌入式控制软件的开发。
二、基于模型的嵌入式系统软件设计方法研究
2.1基于模型的嵌入式系统软件开发流程
图3 基于模型的开发方式
根据目标需求建立可执行模型,在代码自动生成之前进行全模块仿真,使用RTWEmbedded Coder 进行代码自动生成,用一个标准的软件体系结构进行代码整合。
在需求分析阶段,需要根据产品的需求定义所需要完成的工作,以及工作结果需要满足的某种特性要求,并且分析出为了满足这些需求分别需要完成哪些工作,工作的步骤以及不同工作阶段的产出与验收手段等。
在分析了客户需求后就可以开始在Simulink 环境下建立模型,模型的建立框架主要分为三大部分:信号输入部分,逻辑控制部分和信号输出部分。
模型建立好后需要对模型进行仿真、验证,仿真测试通过后使用RTWEC 进行代码自动生成。
然后用一种标准的形式将手写的底层驱动代码与自动生成的代码进行代码整合。
最后将整合好的代码固化于微控制器中。
2.2控制算法的建模与仿真
为了实现基于模型的嵌入式系统开发方法,首先要建立ECU 仿真模型,在后续开发流程中所有环节都是围绕模型进行的。
1 建模工具的选择
在进行基于模型的设计过程中,建模是一个重要环节。
因为只有正确的模型才能够成为正确的设计规范,才能得到正确的代码。
建模环节需要选择合适的建模工具。
目前在世界范围内,系统的建模仿真都广泛采用了Mathworks 公司开发的Simulink平台。
Simulink 平台提供丰富的功能模块,可以快捷地创建系统的模型[4]。
在模型建好后,即可运行模型以实现离线仿真,通过系统的各种输出来验证系统模型的性能或是控制算法的效果,然后根据预期目标来测试模型或控制算法的效果,然后根据预期目标来对模型或控制算法进行参数优化。
此外,通过Simulink 设计的系统模型可以通过Simulink 中的RTWEC 工具箱为控制器生成代码,交叉编译,连接并固化到目标处理器上,进行硬件在环仿真。
对控制逻辑部分的建模采用了Stateflow 工具箱。
Stateflow 是Simulink 平台上的图形化设计与开发工具,主要用于针对控制系统中的复杂控制逻辑进行建模与仿真。
利用Stateflow 可视化的模型和直观的仿真能力,可以清晰、简洁地反映出复杂动态逻辑关系。
Stateflow 的基础是有限状态机理论,它通过对状态图、流程图的创建,对事件驱动系统进行建模和仿真。
2 信号输入部分建模
信号输入部分的建模是通过Simulink 平台上Sorrces 模块库中的各个模块来建立的。
常用来搭建模型的有Constant 模块、Pulse Generator 模块、Signal Builder 模块、Step模块等。
其中Signal Builder 模块可以创建产生多组信号。
3 控制算法建模
状态的标签一般可以由三个部分组成:状态名称Name;相应的状态动作State Action;注释部分/*………*/。
4 信号输出部分建模
信号输出部分的建模是通过Simulink 平台上Sinks 模块库中的各个模块来
建立的。
常用来搭建模型的有Display 模块、Scope 模块、ToWorkspace 模块等。
其中Scope模块把信号按照时间的顺序在二维坐标轴上显示出来。
5 模型的仿真
在嵌入式系统开发过程中,验证设备和控制器在整个系统行为范围内能够正确运行的理想方法是,用实际设备进行测试。
但是这种系统级的测试一般在产品开发过程的晚期进行,这时已经建立原型硬件,解决开发周期这一阶段所发现问题的成本非常昂贵。
因此,使用系统仿真在系统开发的早期进行测试来发现和解决问题是解决方案。
采用基于模型的设计方法,在软件的开发中的每一个流程都可以进行测试。
模型仿真测试是控制系统设计过程的组成部分,根据目标需求建立系统模型后,为了保证模型可靠有效,还必须使用基于时间或基于事件的仿真分析方法,来验证模型的准确性和完整性[5]。
这样在系统开发的初级阶段就可以发现控制逻辑的设计缺陷,最大程度的减少带到实验现场的出错率。
这也为后序的自动代码生成的质量提供了可靠依据。
2.3控制逻辑模型自动代码生成
在基于模型的嵌入式系统开发方法中,自动代码生成是不可缺少的环节。
只有从控制模型自动生成ECU中运行的控制代码,才有可能实现开发过程中快速迭代。
自动代码生成,指生成程序的程序,更详细的是指通过读取工程中的文本或模型,按照指定的设计模式,遵照一定的领域规则,生成规范的计算机能理解的代码的过程。
RTWEC(Real-Time Workshop Embedded Coder)是专门针对嵌入式系统的代码自动生成工具,它可以将Simulink 平台上建立的模型生成标准的C 代码,并且所生成的代码结构紧凑,运行效率较高[16]。
RTWEC 是Mathworks 公司在原有RTW 工具的基础上推出了更加完善
的实时工作间嵌入式代码生成器(RTWEC)开发环境,实现了产品级码的自动生成和测试,加速了从快速原型化到产品化的过渡,增加了针对配置复杂的内嵌系统至关重要的软件工程方面的内容。
使用RTWEC 可以方便地定制,测试以及修改代码,而这些工作都可以在Simulink 环境下完成[6]。
用户在使用RTWEC 工具中定制的嵌入式目标来对系统模型进行自动代码生成工作时,实际是对RTW 环境执行构建操作,该构建操作需要用户预先对参数进行配置(这些参数用于描述和存储模型及生成代码的相关信息),然后通过中间文件的方式将模型信息及配置参数传入TLC(Target Language Compiler 目标语言编译器)环境中进行自动代码生成,并且通过默认的文件来进行流程控制,可以实现对生成代码的控制、对HTML 代码报告的控制及对交叉开发环境的控制等操作,最终实现针对特定嵌入式目标的系统代码实现,如用于描述系统功能的C 文件、可在特定嵌入式环境中运行的可执行程序或适合于某种嵌入式开发环境的项目结构等[7]。
2.4嵌入式系统软件代码整合
虽然借助代码生成工具RTWEC 可以非常容易地生成C 代码(这些代码可以适用于所有提供 C 语言编译器的单片机),但距离实用化的自动代码生成还需要解决如下问题。
由于MATLAB 只完整支持少数型号的微控制器,但目前的代码自动生成工具,而在实际应用中由于客观需要,如性能、成本等的不同要求,使得微控制器的品种繁多,不同型号微控制器在功能、性能、封装等方面很少兼容。
这就使得除少数大公司之外的众多用户难以使用自动代码生成的开发方法。
针对这一问题,可以通过代码整合来实现自动生成的代码与成百上千种具体ECU 硬件平台的集成[8]。
在ECU 软件系统中,RTWEC 自动生成的控制算法代码是其中的一部分,还有一部分代码用RTWEC 实现有一定难度,所以采用手工编写的方法。
手工编写的代码直接操作硬件,以应用程序接口的形式提供给算法程序。
在代码整合前,根据所建模型的输入、输出端口手工编写相应的接口初始化程序。
例如使用按键作为信号输入,就需要编写相应端口作为输入的初始化程序和按键中断的初始化程序。
由于嵌入式软件一般以固定的取样率运行,使得输入、输出器件工作在相同的时间点。
所以整个软件系统集成的核心框架为一个定时器循环程序,不断迭代执行着自动生成的控制逻辑代码。
为了保证程序在最终检测中时序的正确性,这个定时器的时钟周期与模型仿真时的固定步长必须一致。
离散时间控制系统在等间隔时间点对输入进行取样,并更新输出。
每次更新后,输出信号通常保持不变,直到下一次更新。
输入取样点之间(以及输出更新点之间)的时间称为取样周期Ts,其值越小,离散时间控制器的行为越接近于导出它的连续时间系统。
到极限时,取样周期的降低可能超出I/O 硬件性能要求,增加控制器成本和功耗。
采样周期又必须足够长,使得在每个离散时间间隔内有足够时间执行控制器算法和I/O 操作。
RTWEC 工具箱自动生成的代码符合嵌入式系统的数据结构,自动生成的代码文件modelname.h 中就定义了两个针对输入输出的全局结构体。
所以用赋值语句就可以实现输入、输出的变量名与所用目标单片机的端口结合。
代码整合完成就可以将手工装配形成嵌入式系统软件代码编译下载到目标板对控制逻辑进行验证。
三、总结
通过学习基于模型的设计思想,本论文主要介绍了基于模型的嵌入式系统软件开发流程。
在满足实际需要的前提下,文中的设计开发流程考虑了自动代码生成的应用难点,使文中的软件开发流程可以适用于大多微处理器的应用。
参考文献
[1]Jimming Yang, Jason Bauman, Al Beydoun. Implementation of Auto-Code Generation in Legacy Code for Body Control Software Applications[C].SAE World Congress 2008.Detroit, MI, USA, April 2008
[2]于世涛,吴长水,杨林,龚元明,卓斌.基于模型的电控单体泵怠速控制策略的开发.内燃机学报[J],2006,24(2), 162-167(传统模式和V 型)
[3]麻志毅,刘辉,何啸,张乐,吉喆,戈牧.一个支持模型驱动开发的元建模平台的研制[J].电子学报,2008.36(4):731-736
[4]Mathworks.Simulink User’s Guide.2007
[5]Christian Wewetzer,Klaus Lamberg, Rainer Otterbach. Creating Test Patterns for Model-Based Development of Automotive Software. 2006 SAE WorldCongress, Detroit, Michigan, April 3-6, 2006
[6]The MathWorks.Real-Time Workshop Embedded Coder User's Guide[K].The Mathworks,2007
[7]杨涤,李立涛,杨旭,朱承元.系统实时仿真开发环境与应用[M].北京.清华大学出版社,2002
[22]LIU Yuliang,ZHANG Ying,XU Guo,ZHANG Yong.Rapid Development of Embedded Software Based on Matlab[C].The 2008 International Conference on Embedded Software and Systems Symposia,ICESS2008, Washington, DC, USA P132-135。