基于模型的嵌入式C代码的实现与验证

2011-06-22 08:19徐超坤朱婷李威宣
单片机与嵌入式系统应用 2011年12期
关键词:代码生成代码工程师

徐超坤,朱婷,李威宣

(武汉理工大学 测控技术与仪器系,武汉430070)

引 言

伴随着嵌入式系统的复杂性越来越高,系统的开发周期不断延长。但开发周期与系统的安全性、可靠性又有一定的冲突。目前,一台中高档汽车的软件控制代码就超过了500万行,F-35的控制软件更是高达1500万行,一艘航母的控制代码超过一亿行。[1]与此同时,设计本身也变得更加复杂。嵌入式系统设计师必须面对以下挑战:更快地向市场交付产品,更低的成本,保证复杂系统的协调一致,高质量的代码,具有足够的灵活性以适应最后一分钟的变化修改。为了在日趋激烈的市场竞争中占据有利地位,开发出高质量的产品,同时缩短开发周期,手工编写的代码已很难满足应用要求,必须改变传统的项目开发方式。通常,编程人员花费大量的时间来编制程序、查错、调试和验证,增加了工作量,延长了研制周期。此外,手工编制的代码良莠不齐,降低了软件运行的可靠度,增加了代码错误的可能性和系统出错的风险。为了迎接这些挑战,工程师必须找到以更快速有效开发软件和硬件的方法。鉴于软件工程化思想的引入和盛行,软件业发展潮流逐渐趋于工程化、流水化。Matlab环境下集成的Simulink/Stateflow模型设计和使用RTW生成目标代码的软件设计方案便是这一大背景的产物。基于模型的设计就是解决该问题的一种方法。Matlab MBD解决方案可以使用户方便地穿梭于建模、仿真、验证与实施之间,而无需重写代码或改变软件环境。经过近几年的不断完善,这种方法已经从概念演变成实际应用中重要的开发模式。洛克希德·马丁、波音、空中客车、通用汽车、奔驰、西门子、摩托罗拉等公司都有应用MBD技术开发的成功经验。

1 基于模型的设计优点

传统开发模式利用手工编写代码,即把控制策略翻译成高级语言代码,然后用断点调试的方式测试和修改控制程序。其存在很多弊病:

①对软件工程师在嵌入式软件代码编写方面要求较高,虽然软件工程师对被控对象的特性和控制方法有深入了解,但往往并不擅长编写MCU的底层代码。这迫使软件工程师花费大量精力去仔细阅读MCU相关说明书。

② 控制算法的翻译和验证困难。最初的控制策略和算法必须手工翻译成MCU上的程序代码,控制策略的修改将伴随大量原始代码的修改,致使代码的人工维护成本较高。

③ 硬件平台依赖。软件开发过程与硬件平台紧密相连,可移植能力往往较差。硬件平台一旦更换,代码移植成本很高。

而在基于模型的设计中通过自动编码生成技术以及循环硬件测试,工程师们可以消除由于手动操作以及缩短通往产品出货的路径时所产生的错误,生成测试、验证以及最终使用产品的编码,大大提高效率。例如,美国直升飞机制造商基于模型设计为Tiltrotor飞机开发了飞行控制程序,比原来的方法缩短了40% 的软件开发时间。采用传统的设计流程,一个有多年VHDL编码经验的工程师,一般要花费645小时对全功能SDR波形进行手动编码,而另外一个没有多少经验的工程师采用基于模型设计技术,只用了不超过46个小时就完成了相同的工作。通过采用基于模型设计技术,英国国防和航天公司的软件无线电系统(SDR)工程师们能够减少10%的重复工作以及整体开发时间。

基于模型的设计与传统设计相比有以下优点:

① 开发人员具有统一的开发平台,模型的理解具有非歧义性。使用一种公共设计环境,在开发的早期就避免了需求分析错误。

② 模型复用性好,便于维护、组装。

③RTW技术将程序员从代码的海洋中解放出来,使其专注于核心技术的研究上。

④ 基于模型的设计在效率和代码的安全性方面具有无与伦比的优势。

⑤ 可显著降低系统开发周期与研发成本。

⑥ 通过多范畴的仿真改进算法。

⑦ 降低了对物理原型的依赖。

⑧ 设计集成了测试,不断地发现和纠正错误。

在大系统开发中广泛采用MBD技术。从美国的F-35、GM的混合动力车,到X系列空天飞机以及欧洲的空客A380,再到G4的开发都采用了基于模型设计。美国CRC出版社于2009年11月出版了第一本基于模型的嵌入式设计专著《Model-Based Design for Embedded Systems》。而国内基于模型的设计应用才刚刚起步,在此方面远远落后于国外技术发展,相关文献很少。在设计中的应用主要还是停留在模型的早期仿真测试上,DSP开发多停留在M文件测试无误后再改编C代码的阶段,代码自动生成和模型检验的例子较少,没有真正体现基于模型设计的精髓。更多地关注Simulink,对更适于嵌入式系统建模的Stateflow应用相对较少,硬件描述语言很少应用。相比而言,MBD方法在自动代码生成领域 的 研 究 较 多[2-3],而 对 软 件 在 回 路 仿 真 方 面 的 研 究极少。

2 基于模型的设计流程

2.1 DO-17B标准下基于模型的设计

一个完整的基于模型的设计应该符合DO-17B标准,它通常要包含以下几个部分:

◆建立需求文档与可执行的技术规范

◆需求与模型间的双向跟踪

◆模型检查

◆模型的验证

◆软件在环测试

◆处理器在环测试

◆代码优化

◆代码有效性检查

◆代码效率剖析

◆内存用量检查

◆硬件在环测试

◆生成产品代码

基于模型的设计核心是系统模型。MathWorks公司的Simulink产品系列使设计人员可以在一个图形化的交互环境中应用基于模型的设计,在该环境中,设计人员还可以利用直观的模块图,对系统模型和子系统设计进行可视化处理。在统一的可视化的开发测试平台上,从设计概念到实现一气呵成,减少了不必要的劳动,大大缩短项目的开发周期,减少资金投入,提高代码的稳健性、一致性,满足DO-17B航空电子规范的工作流程,使基于模型的设计能够为那些对安全性、可靠性要求极其严格甚至近乎苛刻的设计提供绝好的方案。和基于文本的模型相比,这种图形化的环境可以使你更容易理解设计和子系统之间的交互。Mathworks公司的Real-Time Workshop Embedded Coder可以将Simulink/Stateflow中的算法模型自动转化为嵌入式C代码,大大降低了嵌入式系统的开发门槛。开发人员可以在Simulink/Stateflow中建立系统模型,构思解决方案,然后使用RTW自动生成优化的、可移植的、自定义的产品级C代码,并根据特定的目标硬件配置自动生成嵌入式系统实时应用程序。

2.2 Matlab中C代码生成

Matlab中C代码生成主要有两种方式。

(1)基于EmbeddedMatlab

支持从概念到实现的编程理念,用户可以从现存或自编的M-code中直接生成高效、可读的嵌入式C代码,使编程效率大为提高。

(2)用户通过Simulink和有限状态Stateflow

Simulink是动态和嵌入式等系统的建模与仿真工具,也是基于模型设计的基础。Simulink自带了1000多个用户模块,可实现与有限状态机的无缝链接,扩展对复杂系统的建模能力。基本上它可以快速地创建基于嵌入式器件的应用模型,完成精确的系统模型描述,可以针对任何能够用数学来描述的系统进行建模,例如动力学系统、控制制导系统、通信系统、船舶及汽车等。Simulink还提供了丰富的功能块以及不同的专业模块集合,利用Simulink几乎可以做到不书写一行代码完成整个动态系统的建模工作。Stateflow状态机基于有限状态机的理论使用自然的、便于理解的形式,使复杂的逻辑关系清晰简单。一些传统方法很难实现的算法利用其建模非常容易,特别适用于对复杂的事件驱动系统进行建模和仿真[9]。用户只通过简单直观的鼠标操作,就可以轻而易举地构造出复杂的系统,生成可靠的C代码。利用RTW-EC等工具为用户算法自动生成嵌入式代码。这是一种高效、实用的方法,目前国内外各大公司在进行新产品开发时已广泛采用。它的核心思想是让工程师把精力集中于算法的研究上,把枯燥、困难的代码编写工作留给计算机去自动完成,这样可以大大缩短产品的开发周期,同时避免了人为引入的错误,降低了风险。

2.3 嵌入式代码的快速生成

以8051处理器为例,利用 Matlab Plug-in Blockset与Stateflow无缝链接,利用RTW-EC工具自动生成C代码,并完成代码测试检验工作。开发环境:Matlab+Proteus。

首先构建Stateflow模型并生成代码。以简单的流水灯为例,使用Stateflow构建模型Stateflow-model如图1所示。

图1 Stateflow-model

模型连接Lightflow model如图2所示。

模型连接好后,调整模型配置选项卡参数。处理器选择8051系列,ERT.TLC生成代码选C,生成SⅠL,生成代码报告打勾,其他默认。

图2 Lightflow model

代码生成后还需要对其硬件接口进行修改,添加头文件和输入/输出端口等。

利用软件在环技术,工程师们能够在设计流程中尽早发现并清除错误,而非在VHDL行为测试阶段。借助基于模型设计,工程师们再也不用在流程最后阶段来测试并验证与需求的一致性。取而代之的是,他们在整个设计流程中都能进行测试和验证,既节省时间也节约了成本。

2.4 虚拟硬件在环仿真

Proteus是英国Labcenter Electronics公司研发的多功能EDA软件,是一款集单片机和SPⅠCE分析于一身的电路设计和仿真软件,能方便地完成单片机系统的硬件设计、软件设计、单片机源代码级调试与仿真,功能极其强大。

修改前面生成的代码端口,在Proteus下搭建电路并利用生成的代码在Keil-C中编译,跑马灯运行正常。如图3所示,逻辑分析仪显示波形仿真结果满足设计要求。经硬件开发板验证,实验结果验证了基于模型设计的仿真系统的有效性。

除经典51系列外,该方法适用于8051、DSP、ARM、FPGA等各种嵌入式芯片应用实现。Matlab支持第三方工具,可与ccs/MPLab进行无缝链接,用户可以利用Matlab脚本和Simulink模型在芯片上调试,验证自动生成的嵌入式C代码,并自动下载到目标板执行。

代码生成后,用户可以利用Matlab中提供的工具在Model Advisor中进行模型的检查,在System Test中对模型进行测试,在Design Verifier中进行模型覆盖度等分析,通过模型覆盖分析法确保设计缺陷尽早地被发现。MathWorks公司收购的PolySpace已集成到Matlab平台专门用作C代码验证,进一步提高了代码的稳健性。此外还可以进行处理器在环测试验证(PⅠL)、代码执行追综、代码优化等,在此不作详述。

图3 软件在环仿真

3 结 论

大量事实表明,RTW生成的代码在效率和代码可读性等方面足以与优秀的手写代码媲美。MDB代码的生成有效地减少了人为引入错误的可能,将产品的代码生成和验证过程留给计算机去自动完成,软件的一致性好,软硬件整合简单,可靠性高,大大降低解决问题的成本,代表了嵌入式代码开发的发展方向,具有很好的应用推广价值。

编者注:本文为期刊缩略版,全文见本刊网站www.mesnet.com.cn。

[1]刘杰,基于模型的设计及其嵌入式实现[M].北京:北京航空航天大学出版社,2010.

[2]李真芳,苏涛,黄小宇.DSP程序开发——MATLAB调试及直接目标代码生成[M].西安:西安电子科技大学出版社,2003:6-8.

[4]MathWorks,Ⅰnc.Real-Time Workshop For Use with Simulink,2010.

[5]赵彦斌,钟再敏.基于代码自动生成技术的汽车电子实时控制软件开发[J].计算机辅助工程,2008,17(3):36-40.

[6]胡文华,孙驰,艾胜,等.基于RTW 的2H 桥逆变器SPWM目标代码自动生成[J].电力电子技术,2009,43(11):73-75.

[7]陈永春.从 Matlab/Simulink模型到代码实现[M].北京:清华大学出版社,2002.

[8]李真芳,苏涛,黄小宇.DSP程序开发——Matlab调试及直接目标代码生成[M].西安:西安电子科技大学出版社,2003.

[9]MathWork Ⅰnc.Target language compiler reference guide[OL].(2004-10)[2011-06].http://www.mathworks.com.

[10]Jon Friedman.基于模型的设计给飞行器工程师提供帮助[OL].[2011-06].http://www.designnews.com.cn.

[11]邓焱弢,骆光照,陈哲,等.基于模型设计的处理器在回路联合仿真系统[J].测控技术,2011(3).

[12]吴志红,孙萌,毛明平.基于MATLAB/RTW的车载无刷直流电机调速系统自动代码生成[J].沈阳理工大学学报,2005,24(4):43-45.

猜你喜欢
代码生成代码工程师
《机械工程师》征订启事
Kenoteq的工程师研发环保砖块
青年工程师
Lustre语言可信代码生成器研究进展
一种基于模型和模板融合的自动代码生成方法
创世代码
创世代码
创世代码
创世代码
代码生成技术在软件开发中的应用