APP下载

基于RTW的驱动代码快速生成技术研究

2016-09-26冯辉宗蒋建春

计算机应用与软件 2016年3期
关键词:代码生成编译器源代码

冯辉宗 朱 澎 蒋建春

(重庆邮电大学重庆高校汽车电子与嵌入式系统工程研究中心 重庆 400065)



基于RTW的驱动代码快速生成技术研究

冯辉宗朱澎蒋建春

(重庆邮电大学重庆高校汽车电子与嵌入式系统工程研究中心重庆 400065)

虽然基于模型的设计逐步取代基于文本规范的传统的嵌入式软件开发模式,但是目前RTW(Real-TimeWorkshop)代码生成工具仅仅将控制算法模型自动转换为源代码,对于实时系统的开发来说,目标芯片的驱动代码还需要用户手动编写,然后添加到控制算法的模型源代码中。针对上述问题,提出基于RTW的驱动代码快速生成技术,它能有效地实现在生成代码的同时将驱动程序嵌入到控制模型的源代码中,真正实现由仿真模型到目标芯片应用程序的代码自动生成。最后以汽车电子主流芯片MPC5634的代码生成为例,结果表明了该技术的实用性和高效性。

实时工作间驱动代码生成快速原型

0 引 言

日渐复杂的电控系统的需求对传统的开发模式提出了挑战,催生了快速控制原型的开发方法。它的基本原理是利用快速原型控制器硬件来代替产品的控制器硬件,在建模仿真平台上搭建并修改系统模型,通过自动代码生成工具自动生成模型源代码并将其经过编译链接后下载到快速原型控制器中,进行算法仿真和验证,快速原型技术能缩短研发周期,降低研发成本,提高电控系统的质量。自动代码生成技术是快速原型开发中的关键环节,控制模型源代码通过代码生成工具自动生成,无需手动编写系统的控制程序,虽然目前成熟的技术是利用RTW工具自动生成控制模型源代码[1],但是对于实时系统的开发来说,用来与目标芯片展开通信的设备驱动模块程序还需要用户手动编写,然后添加到控制算法的模型源代码中,这样势必导致控制系统的开发[2]、调试及测试难度大以及控制算法维护成本高。针对这一问题,本文提出一种驱动代码快速生成的方法,在RTW程序创建过程中,将驱动代码嵌入到算法模型源代码中,真正实现电控系统从仿真模型到应用程序的一步生成[8]。

1 RTW体系架构

图1 RTW体系架构

RTW是一个开放式体系架构,它所生成的代码支持多种不同的操作系统和目标芯片。许多方式都能实现配置和丰富RTW功能的目的,RTW的体系架构如图1所示。

RTW的程序创建过程[3]包括:分析Simulink模型、使用目标语言编译器自动生成模型源代码、编译链接源代码。如图1所示,模型分析阶段将模型框图转换为中间描述文件model.rtw,目标语言编译器会根据中间描述文件来转换C代码,由系统tlc(targetlanguagecompiler)文件来控制整个转换过程,对于模型中的模块,会根据模块对应的tlc文件来生成相应的C代码。RTW支持将用户自行编写的S函数模块加入Simulink模型,从而在RTW的程序创建过程中将自定义的模块程序嵌入到Simulink的模型源代码中,在编译链接阶段,创建访问实例控制编译器执行。

2 驱动代码快速生成技术

在RTW的基础上,为了实现驱动代码快速生成,须完成两方面的工作,针对特定目标硬件设计它的目标系统、针对各驱动函数接口设计设备驱动模块,总体方案流程如图2所示。

图2 总体方案流程图

2.1实时目标系统设计

实时目标系统用于配置RTW的程序创建过程,它主要包括三部分:系统目标文件、脚本文件及Hook文件。

1) 系统目标文件用于设置代码生成的参数及目标硬件相关的专用数据。

该文件由四部分组成:浏览器注释行、tlc配置变量、目标语言编译器程序的入口点、RTW_OPTIONS部分。浏览器注释行为系统目标浏览器和程序的创建过程提供了必要的信息,tlc配置变量部分配置了影响代码生成过程的tlc全局变量,入口点允许修改从而调用自己的tlc文件,RTW_OPTIONS部分定义了rtwoptions结构体数组和rtwgensettings结构体,rtwoptions结构体数组控制RTW选项卡中的显示效果,rtwgensettins结构体存放写入中间文件中的信息,同时声明程序创建过程中的其他设置。

2) 脚本文件用于创建访问实例,通过COM(ComponentObjectModel)组件[4]在MATLAB中实现对编译器的操作。为了在模型代码生成完毕后,指定编译器对其进行编译链接操作,脚本文件需要实现的功能有:复制编译器文件夹到模型源代码文件夹中、在工程中添加模型源代码、编译目标工程文件。

3)Hook文件的设计是实时目标系统设计的重要环节,用于在代码生成过程中调用脚本文件将自动生成的模型源代码链接到编译器中,经过编译链接下载到目标板中执行。Hook文件的执行分为六个阶段,贯穿了整个RTW的程序创建过程,分别是:

①entry阶段开始RTW的程序创建过程,检查模型中的各模块;②before_tlc阶段生成模型的中间描述文件,同时RTW调用目标语言编译器TLC自动生成模型源代码;③after_tlc阶段自动生成创建目录的信息文件,并将其存放到创建的文件夹中;④before_make阶段生成程序创建过程必须的库文件;⑤after_make阶段更新创建信息对象;⑥exit阶段根据脚本文件com组件调用编译器对模型源代码进行编译链接及下载。前五个阶段都可以由RTW自动执行,只有exit阶段的执行是需要设计的。

为了减少RTW程序创建过程的风险,需要将定制的目标硬件的目标系统存放在一个单独的文件夹中,并将其添加到MATLAB的工作路径。

2.2设备驱动模块设计

设备驱动模块的设计是实现驱动代码快速生成的关键,设备驱动模块的功能是在RTW程序创建过程中将驱动程序内嵌到模型源代码中,其中生成的驱动模块程序与模块tlc文件有关,模型源代码的功能与原始的目标硬件驱动程序有关。驱动模块的设计包括以下阶段:将目标硬件驱动程序封装成静态库、根据模块参数及输入输出端口数来设计模块的S函数[5],并对其进行封装和加入Simulink模块库,通过编写S-Function使得在RTW的程序创建过程中能将自定义的模块程序嵌入到模型源代码中、设计模块tlc文件用于定制模块程序,tlc文件通过获取模块中的参数值来定制驱动程序并将其嵌入到自动生成的模型源代码中,全程不需要人为对代码做任何修改,如果不设计模块tlc文件,创建的S函数模块只能用于仿真而不能用于生成代码。

以MPC5634的模数转换模块和通用定时器模块为例,介绍驱动模块设计方法。

模数转换驱动模块的设计分成两步:① 设计S-function,S-Function通常由定义与包含、回调函数、Simulink/RTW接口三部分组成。定义与包含和最后的接口部分是固定的,不同特征模块的差异体现在回调函数中。该模块无需设置输入端口,设置一个输出端口,用于将转换结果传递给下一级模块,另外设置两个参数,分别用于获取通道号和转换精度。② 设计模块tlc文件,在程序创建过程中获取模块参数,并对指定通道进行模数转换,最后将结果传递给下一级模块。在tlc文件中设计各个函数实现需要的功能。模数转换模块tlc文件中包含四个函数:BlockTypeSetup实现符合标准的原型声明;Start函数用来实现Adc_Init并添加到模型的初始化函数initialize中;Outputs函数获取模块通道号和转换精度进行转换且把转换结果传给下一模块,最后把代码添加到自动生成的模型step函数中;Terminate函数中的代码在经过程序创建过程后会存放到模型的terminate函数中。

通用定时器(GPT)用来实现系统和应用软件的定时功能,MPC5634的GPT模块包含一个32位的增量计数器和四个32位的比较通道,每个比较通道都有一个单独的中断源,因此MPC5634的GPT模块由四路GPT所组成。通用定时器驱动模块的设计分成两步:① 设计S-function,该模块需要设置一个输出端口,该端口用来连接函数调用子系统(Function-Call)模块,每个定时周期内执行一次该Function-Call模块,同时还需要设置三个参数实现GPT模块的定时功能,这三个参数分别为:GPT通道、定时周期和模块分频值。为了允许连接Function-Call模块,需要在S-Function中对其进行相应的设置,GPT模块没有输入端口,为了保证仿真结果的正确性,必须设置模块的采样时间为无穷大。② 设计模块tlc文件,在程序创建过程中获取模块通道号、定时周期和预分频值,执行GPT模块的定时功能,每个定时周期执行一次GPT中断处理程序,用于调用Fucntion-Call模块中自动生成的代码。在tlc文件中设计各个函数实现需要的功能,通用定时器模块tlc文件包含三个函数:函数BlockTypeSetup和函数Start实现的功能跟模数转换模块类似,进行声明和初始化;Outputs函数用来将Fucntion-Call模块中生成的代码添加到GPT的任务函数中,然后再将该任务函数创建在RTW自动生成的源文件中。由于涉及到定时器中断,必须设计中断函数tlc文件,其主要功能是在中断函数中调用GPT的任务函数,具体操作如下:检查Simuink模块中的GPT模块,获取通道号;根据模块通道号,生成相应的中断函数;在主函数中装载中断函数。

需要注意的是,上述模块tlc文件必须和对应的模块S函数文件同名。

3 MPC5634芯片驱动代码快速生成实例验证

MPC5634微处理器因其优越的性能被汽车电子领域、航空航天等高端嵌入式控制领域广泛使用。对驱动代码快速生成技术进行功能验证及实际应用实例测试,将其应用于MPC5634芯片模数转换模块和通用定时器模块等驱动程序的开发,设计功能验证实例通过RTW程序创建过程之后能够自动后台调用CodeWarrior编译器对所生成的模型源代码进行编译链接,下载到目标板中,验证驱动代码的功能正确性[6]。

首先按上述方法设计MPC5634芯片的实时目标系统,其中脚本文件调用的是CodeWarrior编译器,然后分别开发各功能模块。MPC5634硬件驱动程序静态库是已有的。将驱动模块加入Simulink模块库,用示波器、下载器、开发板搭建好硬件平台,并创建如图3所示的功能验证实例模型。

图3 验证模型,其中K=0.0001

通过RTW生成模型源代码,经过自动编译链接下载到目标板MPC5634中之后,对其进行功能测试,将Adc21号通道连接到开发板的1.2V参考电压上,将Adc22号通道连接到开发板的3.3V参考电压上,用示波器观测Pwm8号和14号通道的输出波形如图4所示。示波器上方波形代表Pwm8号通道的输出,其波形频率为1.26kHz,占空比0.126。示波器下方波形代表Pwm14号通道的输出,其波形频率为3.3kHz,占空比0.5。

该结果与模型期望的的输出信号一致,经以上验证可知本文驱动代码快速生成技术是实用的。

快速驱动代码生成技术是与长安汽车合作项目的中间关键技术,已成功应用到长安汽车公司车身控制系统的实际应用开发中,针对车身控制需求,开发车身控制BCM(BodyControlModel)模块,包括车窗、车灯、雨刮等。利用控制模块搭建控制模型,经仿真后添加已开发的驱动模块和操作系统模块,自动生成代码编译下载到STM8目标控制芯片,经实车反复测试代码能正确控制车身部件后,现已应用于实际量产过程,体现了其实际生产应用价值。

4 结 语

RTW是开放式架构,许多方式都能实现配置和丰富RTW功能的目的。控制算法模型的代码生成已经不能满足电控系统快速开发[7]的要求,本文介绍的快速生成驱动代码的技术大大提高了快速控制原型的效率,经验证,该方法确实高效可行,简单易学,对各种芯片通用,对快速控制原型系统开发具有指导意义。

[1] 杨涤,李立涛,杨旭,等.系统实时仿真开发环境与应用[M].北京:清华大学出版社,2002:1-37.

[2] 陈婷,张烈平.基于MATLAB/RTW的实时控制器快速开发方法的研究[J].科学技术与工程,2008,8(17):5071-5074.

[3] 张晓辉.基于RTW的AMT代码自动生成技术研究[D].济南:山东大学机械工程学院,2012.

[4] 田丽华,曾航.基于COM组件的MATLAB与VC++混合编程[J].科技创新导报,2009(31):27-28.

[5] 北京恒润科技公司.S-Function的编写[M].北京:北京恒润科技公司,2010:33-53.

[6] 齐振恒,孙中杰,李涛.RTW嵌入式代码自动生成机制与代码结构分析[J].计算机测量与控制,2010,18(3):639-642.

[7]HuJinhui,HuDabin,XiaoJianbo.StudyofReal-TimeSimulationSystemBasedonRTWandItsApplicationinWarshipSimulator[C].TheNinthInternationalConferenceonElectronicMeasurement&Instruments,2009:966-970.

[8] 刘杰.基于模型的设计—MCU篇[M].北京:北京航空航天大学出版社,2011:152-218.

RESEARCHONDRIVERCODEQUICKGENERATIONTECHNIQUEBASEDONREAL-TIMEWORKSHOP

FengHuizongZhuPengJiangJianchun

(Engineering Research Center of Automotive Electronic and Embedded System,Chongqing University of Posts and Telecommunication,Chongqing 400065,China)

Althoughthemodel-baseddesigntechniqueisgraduallysubstitutingthetextspecification-basedtraditionalembeddedsoftwaredevelopmentpattern,butatpresent,RTWcodegenerationtoolonlytransformsthecontrolalgorithmmodelintomodelsourcecode.Astothedevelopmentofreal-timesystem,usershavetoprogramdrivercodefortargetchip,thenappendtomodelsourcecodeofcontrolalgorithm.Inviewoftheabovequestions,weputforwardtheRTW-baseddrivercodequickgenerationtechnique,whichcaneffectivelyrealisetoembedthedriverprogramtosourcecodesofcontrolmodelwhilegeneratingcode,thusrealisestrulytheautomaticcodegenerationfromsimulationmodeltoapplicationsoftargetchips.InendofthepaperweusethecodegenerationofmainstreamchipMPC5634ofautomotiveelectronicsasinstance,resultshaveverifiedthepracticalityandefficiencyofthetechnique.

Real-timeworkshopDrivercodegenerationRapidprototype

2014-08-07。“核高基”重大专项(2009ZX01038-002-002)。冯辉宗,教授,主研领域:汽车电子控制系统,发动机控制。朱澎,硕士生。蒋建春,副教授。

TP391

ADOI: 10.3969/j.issn.1000-386x.2016.03.052

猜你喜欢

代码生成编译器源代码
基于TXL的源代码插桩技术研究
Lustre语言可信代码生成器研究进展
基于相异编译器的安全计算机平台交叉编译环境设计
一种基于模型和模板融合的自动代码生成方法
软件源代码非公知性司法鉴定方法探析
基于语法和语义结合的源代码精确搜索方法
代码生成技术在软件开发中的应用
Microchip为MPLAB XC系列专业版编译器推出低成本可续订包月许可证
揭秘龙湖产品“源代码”
基于XML的代码自动生成工具