嵌入式代码生成器

       代码生成器和工具属于编译器的一种,可以自动地将模型语言转换成目标语言,经过多年的研究和发展,国内外的研究学者和软件供应商已经开发了很多的代码生成器和代码生成工具,被广泛的应用于数据库系统和Web平台的开发中,而嵌入式系统与特定的应用领域紧密结合,目前并没有适合嵌入式系统的通用的代码生成器和工具。本文对工业界和学术界关于嵌入式系统的代码生成器和工具研究做了简单的总结。

       高安全性嵌入式软件开发环境(Safety-critical Application Development Environment, SCADE)[17]是由法国爱斯特尔技术公司开发的一款支持需求描述、模型仿真、形式化验证和高质量代码自动生成的工具,能够应用到嵌入式安全攸关系统开发的各个阶段,实现软件开发的自动化。SCADE通过具有严格数学语义的数据流图和有限状态机对系统需求进行图形化建模,能够建立精确、无二义性的系统模型,通过仿真和形式化验证可以保证模型的安全性后,代码生成器KCG可以自动生成面向嵌入式系统工程的产品级Ada或C语言代码,代码无需修改就可以直接嵌入到开发的系统中。SCADE生成的代码与模型严格一致,即能够保证生成的代码的安全性和正确性。目前,在所有的代码生成器和工具中只有SCADE能够生成满足DO-178B质量认证的A级安全标准软件代码,SCADE被广泛应用到高安全性嵌入式系统的软件开发中,可以生成70%以上的软件代码,而且在提升软件质量的同时,节约50%以上的软件开发、测试和验证时间。

       Simulink[18]是美国Mathworks公司开发的Matlab工具中的一个组件,支持可视化系统级模型建模、仿真和代码自动生成,用于构建嵌入式系统及其环境的可执行模型,满足嵌入式系统进行连续的测试和验证的要求。Stateflow是Simulink的一个扩展,允许用户将状态图作为组件嵌入Simulink模型中,用于事件驱动和混合形式的嵌入式控制系统。Simulink提供了一种图形化软件开发方式,用户根据系统需求进行建模,然后进行仿真调试,工具可以自动生成符合工业级质量的C/C++代码,可直接将生成的代码文件部署到MCU、DSP和FPGA等硬件控制平台上,实现零代码编程开发。Simulink/Stateflow可以与Matlab完美融合,能够在Simulink/Stateflow中将集成在Matlab平台上的算法或其他工具的功能融入到模型中,目前被广泛地应用于嵌入式系统的代码生成中,例如在汽车领域中60%以上的代码是由Simulink生成,而且生成的是满足AUTOSAR规范和ISO26262认证的产品级C语言代码。

       Yakindu[19][20]由Itemis AG公司开发和驱动,是一款基于状态机进行建模、验证和代码生成的开源工具。使用该工具可以轻松地以可视化方式创建复杂的系统,在建模的同时模拟和测试系统的行为,对系统的正确性进行验证,而且状态机可以自动转换为C、C++、Java和Python等不同目标平台的高质量源代码。Yakindu基于开源开发平台Eclipse,以图形方式创建和编辑状态图,状态支持多层嵌套,允许直接在状态图模型中使用C/C++类型、变量和操作,实时检查状态图模型的句法和语义问题,采用基于周期和事件驱动两种方案相结合的方式去生成代码。Yakindu可以保证生成的代码总是正确的,至少在某种意义上它是状态图模型的一对一映射,生成的状态机代码可以有效地用于嵌入式系统。除此之外,Yakindu的建模、验证部分与平台无关,可以结合具体嵌入式系统的应用场景对代码生成部分进行重写,结合实际工程中现有的代码库对工具进行扩展和集成,实现软件代码的复用,提高开发效率。

       PtolemyII[21][22]由美国加州伯克利大学Lee E A教授团队设计和开发,是一款支持异构嵌入式系统的建模、仿真和代码自动生成的开源工具。在建模中引入面向参与者(Actor)、分层异构的方法,Actor指表示计算、输入和输出的组件,Actor使得设计的模型更容易理解,而且层次化结构能够很好地支持同步数据流模型、有限状态机模型、进程网络模型、离散事件模型、连续时间模型等计算模型。PtolemyII是一个基于Java的组件组装的框架,具有图形化的用户界面,同时也支持编写标记语言来创建模型,采用基于模板技术的代码生成方法,能够允许从多种计算模型自动生成简单的C和Java代码。PtolemyII具有开源、通用、易扩展的特性,可以和具体的嵌入式系统进行结合,生成实际系统需求的软件代码,目前已成功的应用于航空和电子等领域的软件开发中。

       ModelCoder是由中国迪捷软件科技公司开发的一款支持嵌入式安全攸关系统敏捷建模和高质量C代码自动生成的软件设计和开发工具。该工具包括图形化建模、仿真测试和代码自动生成三个模块,开发人员可以直接使用直观的图形符号建立数据流和状态机模型,在生成代码的过程中对模型进行形式化验证,可在早期发现模型中的设计缺陷,进行及时的修改,以保证生成安全可靠的C语言代码。为了确保生成的代码与模型严格一致,ModelCoder不仅仅利用模型检测技术对模型本身进行验证,而且对模型到代码的生成过程进行了严格的定理证明和数学推导。ModelCoder通过分层转换的方式完成模型语言到C代码的转换,并定义模型到C代码相关层的形式化语义,证明转换前的模型语言在其语义下和转换后的C语言在其语义下执行等价,通过语义保持的方式实现转换过程的形式化验证。随着国际软件SCADE和Simulink等的封锁限制,形式化验证的代码生成工具ModelCoder成为一个很好的替代工具,目前已经成功应用于部分飞机的飞控系统和航电系统以及核电站DCS系统中。

       国防科技大学董威教授团队[23]开发了一款用于无人驾驶汽车决策系统的规则建模、验证和代码自动生成的工具,通过规则表或者迁移图的形式编写规则,然后保存成一种中间语言,代码翻译器可以将其转换成可执行的C代码,即通过规则自动生成程序代码。

       西安电子科技大学软件工程研究所刘西洋教授团队[24]开发了一款用于航天控制领域的层次化建模、验证、仿真和代码生成的工具。该工具提供了一个图形化建模界面,用户可以根据系统需求进行状态图和流程图建模,然后对状态图和流程图相互结合的层次化模型进行验证和仿真,最后生成可直接编译运行的C语言代码。

       南京航空航天大学高安全系统的软件开发与验证技术工信部重点实验室杨志斌教授团队设计和开发了一整套的代码自动生成工具,包括基于限定中文自然语言需求到AADL模型的自动生成工具[25]、基于AADL的形式化验证工具[26]、基于AADL模型到C/Ada代码的自动生成工具[27]等。基于开源工具OSATE进行了集成,能够实现从需求到代码的自动生成,能够生成可运行的多任务代码、多线程代码和多核平台代码。

       随着国际高安全性嵌入式系统代码自动生成器和工具的封锁限制,国内的代码自动生成技术还处在研究阶段,代码生成工具更多的是结合具体的研究背景去设计和开发,不具有通用性,无法成为Simulink和SCADE等的有效替代品。目前成熟的代码生成器和工具主要用于航空航天电子嵌入式系统的开发,且较为昂贵,使用太过复杂,生成的代码过于冗余,不符合电网安全稳定控制系统对代码的要求。因此,针对电网安全稳定控制系统的代码自动生成的方法和工具还有待进一步研究。

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值