摘要:传统的电控软件开发形式已无法满意日益巨大、杂乱的轿车电控体系的开发要求,根据模型的开发办法以及主动代码生成技能在轿车嵌入式软件开发中得到越来越广泛的运用。本文介绍运用Matlab/Real-Time Workshop Embedded Coder(Matlab/RTW EC)将Simulink操控模型生成C代码以及生成代码与Freescale MC9S12D64单片机底层代码的集成办法,经过测验验证了生成代码的有效性。
导言
跟着轿车电子操控体系的日益杂乱化,以及用户对产品安全性、牢靠性的要求,嵌入式运用的开发难度与代码量都在敏捷添加。现在,一台中高档轿车的软件操控代码就超越了500万行,通用雪佛兰Volt整车的代码量超越1 000万行,而一辆功用先进的医疗急救车乃至需求超越5 000万行的软件代码,并且跟着规划内容的添加、多变的新特征、含糊的规划参数以及用户不断添加的需求,程序员的劳动量大大添加,传统的手艺编程办法越来越不能适应现代轿车电控体系的规划开发要求。
Matlab/Real-Time Workshop Embedded Coder(Matlab/RTW EC)是MathWorks公司供给的嵌入式代码主动生成东西,它能够快速地将Matlab/Simulink操控器模型主动生成优化的、可移植的产等第C代码,并根据特定的方针装备主动生成嵌入式体系实时运用程序,然后大大减轻软件工程师的作业量,缩短嵌入式体系的开发周期,进步开发功率。本文以Freescale MC9S12D64单片机为方针芯片,阐明从Simulink操控模型生成方针嵌入式代码的办法。
1 根据模型的规划
根据模型的规划是运用计算机建模仿真技能,快速完结嵌入式产品等产品开发进程中中心算法的开发和验证作业,运用主动代码生成技能快速完结产品开发中的逻辑功用、处理算法的完结,一同运用模型的办法构造出被控方针,便利、方便、很多重复地进行产品操控作用的验证作业。比较于传统的开发形式,根据模型的规划开发流程具有以下一些长处:
①在一致的开发测验平台上,让规划从需求分析阶段就开端验证与承认,并做到继续不断地验证与测验,让规划的缺点尽量暴露在开发的初级阶段。
②让工程师把首要精力放在算法和测验用例的研讨上,嵌入式C代码的生成与验证留给计算机去主动完结。
③模型的复用性好,易于保护和移植。
④大大缩短开发周期并下降开发本钱。
图1为根据模型的规划开发流程。在根据模型的规划办法中,体系工程师首先要树立一个体系模型来准确、无歧义地描绘用户的需求,创立一个可执行、可盯梢的技能规范,并在体系模型与需求之间树立双向链接。在整个开发进程中,工程师运用测验用例追寻体系级模型和需求,了解体系模型的功用掩盖度。这些测验一般包含以下三种:
①软件在环测验(Software-in-the-Loop,SIL)是对模型生成的代码或许手写代码进行非实时仿真,意图是为了验证生成的代码和模型在功用上的等效性。
②处理器在环测验(Processor-in-the-Loop,PIL)是将主动生成的C代码下载到方针处理器中,与被控方针一同进行非实时的联合仿真,意图是为了丈量模型生成的代码在方针处理器上的运转时刻,即查看运转速度和资源耗费。
③硬件在环测验(Hardware-in-the-Loop,HIL)是把被控方针的模型生成C代码并编译成可执行的文件放到工控机上运转,然后把操控器和工控机经过线|衔接,完结闭环操控,查看整个体系功用。
明显,算法的完结是联络体系模型和在环测验验证的重要枢纽,这其间所触及的代码主动生成技能是根据模型开发办法的关键技能之一。主动代码生成的根本流程包含:运转Model Advisor进行模型查看、装备代码生成选项、生成代码、查看生成的代码及陈述以及测验生成的代码等5个环节。
生成代码的进程如图2所示。用户在Matlab/Simulink/Stateflow树立的算法模型经过Simulink编译器生成rtw中心文件;rtw文件是一个描绘整个模型的结构体文本,包含模型中的参数、变量、模块称号以及为代码生成所做的各种装备,rtw文件经过方针言语编译器(Target Lang uage Compiler,TLC)生成C言语代码,终究经过C编译器得到终究的可执行程序。
2 流水灯模型树立及嵌入式代码生成
流水灯Simulink功用验证模型,经过设置脉冲产生函数的周期和占空比,使LED灯依照必定的时刻距离顺时针方向轮番点亮。示意图略逐个编者注。
将流水灯功用验证模型中的脉冲生成器和Goto模块别离运用In、Out模块替换后得到的主动代码生成模型如图3所示。
在Configuration Parameters中对代码生成进程进行相关的装备并指定变量的数据类型后,Matlab/RTW EC根据上述的流水灯操控模型主动生成了ert_ main.c、LightsCtr.c、LightsCtr.h、LightsCtr_private.h、LightsCtr_types.h、LightsCtr_private.h、rt wty pes.h等6个文件。其间,ert_main.c供给了算法函数调用的样例程序,它包含main()、rt_OneStep()函数。LightsCtr.c包含了Lights Ct rinitialize()、LightsCtrstep()、LightsCtr_terminate()函数,是整个模型的算法完结代码。
3 运用层底层代码集成
Matlab/RTW EC生成的运用层代码和特定芯片的驱动代码集成现在首要有两种办法:一种办法是在建模进程中,将驱动程序封装为S函数模块,代码主动生成的进程中树立相应芯片的TLC模板文件,完结一键从模型到编泽代码下载到操控器芯片中。第二种办法是在集成开发环境(Integrated Development Environment,IDE)中手艺进行代码集成。
在产品化的项目开发中,选用第一种办法集成代码,需求对底层驱动建模,存在以下的困难:①底层驱动在Simulink环境下不能仿真;②底层驱动建模需求了解TLC脚本言语;③产品化项意图底层软件往往很大,开发一个安全、牢靠的底层模块库,针对特定的方针板定制TLC文件等,都需求很多的时刻投入,不易操作。