馮輝宗 朱 澎 蔣建春
(重慶郵電大學(xué)重慶高校汽車電子與嵌入式系統(tǒng)工程研究中心 重慶 400065)
?
基于RTW的驅(qū)動代碼快速生成技術(shù)研究
馮輝宗朱澎蔣建春
(重慶郵電大學(xué)重慶高校汽車電子與嵌入式系統(tǒng)工程研究中心重慶 400065)
雖然基于模型的設(shè)計逐步取代基于文本規(guī)范的傳統(tǒng)的嵌入式軟件開發(fā)模式,但是目前RTW(Real-TimeWorkshop)代碼生成工具僅僅將控制算法模型自動轉(zhuǎn)換為源代碼,對于實時系統(tǒng)的開發(fā)來說,目標(biāo)芯片的驅(qū)動代碼還需要用戶手動編寫,然后添加到控制算法的模型源代碼中。針對上述問題,提出基于RTW的驅(qū)動代碼快速生成技術(shù),它能有效地實現(xiàn)在生成代碼的同時將驅(qū)動程序嵌入到控制模型的源代碼中,真正實現(xiàn)由仿真模型到目標(biāo)芯片應(yīng)用程序的代碼自動生成。最后以汽車電子主流芯片MPC5634的代碼生成為例,結(jié)果表明了該技術(shù)的實用性和高效性。
實時工作間驅(qū)動代碼生成快速原型
日漸復(fù)雜的電控系統(tǒng)的需求對傳統(tǒng)的開發(fā)模式提出了挑戰(zhàn),催生了快速控制原型的開發(fā)方法。它的基本原理是利用快速原型控制器硬件來代替產(chǎn)品的控制器硬件,在建模仿真平臺上搭建并修改系統(tǒng)模型,通過自動代碼生成工具自動生成模型源代碼并將其經(jīng)過編譯鏈接后下載到快速原型控制器中,進(jìn)行算法仿真和驗證,快速原型技術(shù)能縮短研發(fā)周期,降低研發(fā)成本,提高電控系統(tǒng)的質(zhì)量。自動代碼生成技術(shù)是快速原型開發(fā)中的關(guān)鍵環(huán)節(jié),控制模型源代碼通過代碼生成工具自動生成,無需手動編寫系統(tǒng)的控制程序,雖然目前成熟的技術(shù)是利用RTW工具自動生成控制模型源代碼[1],但是對于實時系統(tǒng)的開發(fā)來說,用來與目標(biāo)芯片展開通信的設(shè)備驅(qū)動模塊程序還需要用戶手動編寫,然后添加到控制算法的模型源代碼中,這樣勢必導(dǎo)致控制系統(tǒng)的開發(fā)[2]、調(diào)試及測試難度大以及控制算法維護(hù)成本高。針對這一問題,本文提出一種驅(qū)動代碼快速生成的方法,在RTW程序創(chuàng)建過程中,將驅(qū)動代碼嵌入到算法模型源代碼中,真正實現(xiàn)電控系統(tǒng)從仿真模型到應(yīng)用程序的一步生成[8]。
圖1 RTW體系架構(gòu)
RTW是一個開放式體系架構(gòu),它所生成的代碼支持多種不同的操作系統(tǒng)和目標(biāo)芯片。許多方式都能實現(xiàn)配置和豐富RTW功能的目的,RTW的體系架構(gòu)如圖1所示。
RTW的程序創(chuàng)建過程[3]包括:分析Simulink模型、使用目標(biāo)語言編譯器自動生成模型源代碼、編譯鏈接源代碼。如圖1所示,模型分析階段將模型框圖轉(zhuǎn)換為中間描述文件model.rtw,目標(biāo)語言編譯器會根據(jù)中間描述文件來轉(zhuǎn)換C代碼,由系統(tǒng)tlc(targetlanguagecompiler)文件來控制整個轉(zhuǎn)換過程,對于模型中的模塊,會根據(jù)模塊對應(yīng)的tlc文件來生成相應(yīng)的C代碼。RTW支持將用戶自行編寫的S函數(shù)模塊加入Simulink模型,從而在RTW的程序創(chuàng)建過程中將自定義的模塊程序嵌入到Simulink的模型源代碼中,在編譯鏈接階段,創(chuàng)建訪問實例控制編譯器執(zhí)行。
在RTW的基礎(chǔ)上,為了實現(xiàn)驅(qū)動代碼快速生成,須完成兩方面的工作,針對特定目標(biāo)硬件設(shè)計它的目標(biāo)系統(tǒng)、針對各驅(qū)動函數(shù)接口設(shè)計設(shè)備驅(qū)動模塊,總體方案流程如圖2所示。
圖2 總體方案流程圖
2.1實時目標(biāo)系統(tǒng)設(shè)計
實時目標(biāo)系統(tǒng)用于配置RTW的程序創(chuàng)建過程,它主要包括三部分:系統(tǒng)目標(biāo)文件、腳本文件及Hook文件。
1) 系統(tǒng)目標(biāo)文件用于設(shè)置代碼生成的參數(shù)及目標(biāo)硬件相關(guān)的專用數(shù)據(jù)。
該文件由四部分組成:瀏覽器注釋行、tlc配置變量、目標(biāo)語言編譯器程序的入口點、RTW_OPTIONS部分。瀏覽器注釋行為系統(tǒng)目標(biāo)瀏覽器和程序的創(chuàng)建過程提供了必要的信息,tlc配置變量部分配置了影響代碼生成過程的tlc全局變量,入口點允許修改從而調(diào)用自己的tlc文件,RTW_OPTIONS部分定義了rtwoptions結(jié)構(gòu)體數(shù)組和rtwgensettings結(jié)構(gòu)體,rtwoptions結(jié)構(gòu)體數(shù)組控制RTW選項卡中的顯示效果,rtwgensettins結(jié)構(gòu)體存放寫入中間文件中的信息,同時聲明程序創(chuàng)建過程中的其他設(shè)置。
2) 腳本文件用于創(chuàng)建訪問實例,通過COM(ComponentObjectModel)組件[4]在MATLAB中實現(xiàn)對編譯器的操作。為了在模型代碼生成完畢后,指定編譯器對其進(jìn)行編譯鏈接操作,腳本文件需要實現(xiàn)的功能有:復(fù)制編譯器文件夾到模型源代碼文件夾中、在工程中添加模型源代碼、編譯目標(biāo)工程文件。
3)Hook文件的設(shè)計是實時目標(biāo)系統(tǒng)設(shè)計的重要環(huán)節(jié),用于在代碼生成過程中調(diào)用腳本文件將自動生成的模型源代碼鏈接到編譯器中,經(jīng)過編譯鏈接下載到目標(biāo)板中執(zhí)行。Hook文件的執(zhí)行分為六個階段,貫穿了整個RTW的程序創(chuàng)建過程,分別是:
①entry階段開始RTW的程序創(chuàng)建過程,檢查模型中的各模塊;②before_tlc階段生成模型的中間描述文件,同時RTW調(diào)用目標(biāo)語言編譯器TLC自動生成模型源代碼;③after_tlc階段自動生成創(chuàng)建目錄的信息文件,并將其存放到創(chuàng)建的文件夾中;④before_make階段生成程序創(chuàng)建過程必須的庫文件;⑤after_make階段更新創(chuàng)建信息對象;⑥exit階段根據(jù)腳本文件com組件調(diào)用編譯器對模型源代碼進(jìn)行編譯鏈接及下載。前五個階段都可以由RTW自動執(zhí)行,只有exit階段的執(zhí)行是需要設(shè)計的。
為了減少RTW程序創(chuàng)建過程的風(fēng)險,需要將定制的目標(biāo)硬件的目標(biāo)系統(tǒng)存放在一個單獨的文件夾中,并將其添加到MATLAB的工作路徑。
2.2設(shè)備驅(qū)動模塊設(shè)計
設(shè)備驅(qū)動模塊的設(shè)計是實現(xiàn)驅(qū)動代碼快速生成的關(guān)鍵,設(shè)備驅(qū)動模塊的功能是在RTW程序創(chuàng)建過程中將驅(qū)動程序內(nèi)嵌到模型源代碼中,其中生成的驅(qū)動模塊程序與模塊tlc文件有關(guān),模型源代碼的功能與原始的目標(biāo)硬件驅(qū)動程序有關(guān)。驅(qū)動模塊的設(shè)計包括以下階段:將目標(biāo)硬件驅(qū)動程序封裝成靜態(tài)庫、根據(jù)模塊參數(shù)及輸入輸出端口數(shù)來設(shè)計模塊的S函數(shù)[5],并對其進(jìn)行封裝和加入Simulink模塊庫,通過編寫S-Function使得在RTW的程序創(chuàng)建過程中能將自定義的模塊程序嵌入到模型源代碼中、設(shè)計模塊tlc文件用于定制模塊程序,tlc文件通過獲取模塊中的參數(shù)值來定制驅(qū)動程序并將其嵌入到自動生成的模型源代碼中,全程不需要人為對代碼做任何修改,如果不設(shè)計模塊tlc文件,創(chuàng)建的S函數(shù)模塊只能用于仿真而不能用于生成代碼。
以MPC5634的模數(shù)轉(zhuǎn)換模塊和通用定時器模塊為例,介紹驅(qū)動模塊設(shè)計方法。
模數(shù)轉(zhuǎn)換驅(qū)動模塊的設(shè)計分成兩步:① 設(shè)計S-function,S-Function通常由定義與包含、回調(diào)函數(shù)、Simulink/RTW接口三部分組成。定義與包含和最后的接口部分是固定的,不同特征模塊的差異體現(xiàn)在回調(diào)函數(shù)中。該模塊無需設(shè)置輸入端口,設(shè)置一個輸出端口,用于將轉(zhuǎn)換結(jié)果傳遞給下一級模塊,另外設(shè)置兩個參數(shù),分別用于獲取通道號和轉(zhuǎn)換精度。② 設(shè)計模塊tlc文件,在程序創(chuàng)建過程中獲取模塊參數(shù),并對指定通道進(jìn)行模數(shù)轉(zhuǎn)換,最后將結(jié)果傳遞給下一級模塊。在tlc文件中設(shè)計各個函數(shù)實現(xiàn)需要的功能。模數(shù)轉(zhuǎn)換模塊tlc文件中包含四個函數(shù):BlockTypeSetup實現(xiàn)符合標(biāo)準(zhǔn)的原型聲明;Start函數(shù)用來實現(xiàn)Adc_Init并添加到模型的初始化函數(shù)initialize中;Outputs函數(shù)獲取模塊通道號和轉(zhuǎn)換精度進(jìn)行轉(zhuǎn)換且把轉(zhuǎn)換結(jié)果傳給下一模塊,最后把代碼添加到自動生成的模型step函數(shù)中;Terminate函數(shù)中的代碼在經(jīng)過程序創(chuàng)建過程后會存放到模型的terminate函數(shù)中。
通用定時器(GPT)用來實現(xiàn)系統(tǒng)和應(yīng)用軟件的定時功能,MPC5634的GPT模塊包含一個32位的增量計數(shù)器和四個32位的比較通道,每個比較通道都有一個單獨的中斷源,因此MPC5634的GPT模塊由四路GPT所組成。通用定時器驅(qū)動模塊的設(shè)計分成兩步:① 設(shè)計S-function,該模塊需要設(shè)置一個輸出端口,該端口用來連接函數(shù)調(diào)用子系統(tǒng)(Function-Call)模塊,每個定時周期內(nèi)執(zhí)行一次該Function-Call模塊,同時還需要設(shè)置三個參數(shù)實現(xiàn)GPT模塊的定時功能,這三個參數(shù)分別為:GPT通道、定時周期和模塊分頻值。為了允許連接Function-Call模塊,需要在S-Function中對其進(jìn)行相應(yīng)的設(shè)置,GPT模塊沒有輸入端口,為了保證仿真結(jié)果的正確性,必須設(shè)置模塊的采樣時間為無窮大。② 設(shè)計模塊tlc文件,在程序創(chuàng)建過程中獲取模塊通道號、定時周期和預(yù)分頻值,執(zhí)行GPT模塊的定時功能,每個定時周期執(zhí)行一次GPT中斷處理程序,用于調(diào)用Fucntion-Call模塊中自動生成的代碼。在tlc文件中設(shè)計各個函數(shù)實現(xiàn)需要的功能,通用定時器模塊tlc文件包含三個函數(shù):函數(shù)BlockTypeSetup和函數(shù)Start實現(xiàn)的功能跟模數(shù)轉(zhuǎn)換模塊類似,進(jìn)行聲明和初始化;Outputs函數(shù)用來將Fucntion-Call模塊中生成的代碼添加到GPT的任務(wù)函數(shù)中,然后再將該任務(wù)函數(shù)創(chuàng)建在RTW自動生成的源文件中。由于涉及到定時器中斷,必須設(shè)計中斷函數(shù)tlc文件,其主要功能是在中斷函數(shù)中調(diào)用GPT的任務(wù)函數(shù),具體操作如下:檢查Simuink模塊中的GPT模塊,獲取通道號;根據(jù)模塊通道號,生成相應(yīng)的中斷函數(shù);在主函數(shù)中裝載中斷函數(shù)。
需要注意的是,上述模塊tlc文件必須和對應(yīng)的模塊S函數(shù)文件同名。
MPC5634微處理器因其優(yōu)越的性能被汽車電子領(lǐng)域、航空航天等高端嵌入式控制領(lǐng)域廣泛使用。對驅(qū)動代碼快速生成技術(shù)進(jìn)行功能驗證及實際應(yīng)用實例測試,將其應(yīng)用于MPC5634芯片模數(shù)轉(zhuǎn)換模塊和通用定時器模塊等驅(qū)動程序的開發(fā),設(shè)計功能驗證實例通過RTW程序創(chuàng)建過程之后能夠自動后臺調(diào)用CodeWarrior編譯器對所生成的模型源代碼進(jìn)行編譯鏈接,下載到目標(biāo)板中,驗證驅(qū)動代碼的功能正確性[6]。
首先按上述方法設(shè)計MPC5634芯片的實時目標(biāo)系統(tǒng),其中腳本文件調(diào)用的是CodeWarrior編譯器,然后分別開發(fā)各功能模塊。MPC5634硬件驅(qū)動程序靜態(tài)庫是已有的。將驅(qū)動模塊加入Simulink模塊庫,用示波器、下載器、開發(fā)板搭建好硬件平臺,并創(chuàng)建如圖3所示的功能驗證實例模型。
圖3 驗證模型,其中K=0.0001
通過RTW生成模型源代碼,經(jīng)過自動編譯鏈接下載到目標(biāo)板MPC5634中之后,對其進(jìn)行功能測試,將Adc21號通道連接到開發(fā)板的1.2V參考電壓上,將Adc22號通道連接到開發(fā)板的3.3V參考電壓上,用示波器觀測Pwm8號和14號通道的輸出波形如圖4所示。示波器上方波形代表Pwm8號通道的輸出,其波形頻率為1.26kHz,占空比0.126。示波器下方波形代表Pwm14號通道的輸出,其波形頻率為3.3kHz,占空比0.5。
該結(jié)果與模型期望的的輸出信號一致,經(jīng)以上驗證可知本文驅(qū)動代碼快速生成技術(shù)是實用的。
快速驅(qū)動代碼生成技術(shù)是與長安汽車合作項目的中間關(guān)鍵技術(shù),已成功應(yīng)用到長安汽車公司車身控制系統(tǒng)的實際應(yīng)用開發(fā)中,針對車身控制需求,開發(fā)車身控制BCM(BodyControlModel)模塊,包括車窗、車燈、雨刮等。利用控制模塊搭建控制模型,經(jīng)仿真后添加已開發(fā)的驅(qū)動模塊和操作系統(tǒng)模塊,自動生成代碼編譯下載到STM8目標(biāo)控制芯片,經(jīng)實車反復(fù)測試代碼能正確控制車身部件后,現(xiàn)已應(yīng)用于實際量產(chǎn)過程,體現(xiàn)了其實際生產(chǎn)應(yīng)用價值。
RTW是開放式架構(gòu),許多方式都能實現(xiàn)配置和豐富RTW功能的目的??刂扑惴P偷拇a生成已經(jīng)不能滿足電控系統(tǒng)快速開發(fā)[7]的要求,本文介紹的快速生成驅(qū)動代碼的技術(shù)大大提高了快速控制原型的效率,經(jīng)驗證,該方法確實高效可行,簡單易學(xué),對各種芯片通用,對快速控制原型系統(tǒng)開發(fā)具有指導(dǎo)意義。
[1] 楊滌,李立濤,楊旭,等.系統(tǒng)實時仿真開發(fā)環(huán)境與應(yīng)用[M].北京:清華大學(xué)出版社,2002:1-37.
[2] 陳婷,張烈平.基于MATLAB/RTW的實時控制器快速開發(fā)方法的研究[J].科學(xué)技術(shù)與工程,2008,8(17):5071-5074.
[3] 張曉輝.基于RTW的AMT代碼自動生成技術(shù)研究[D].濟(jì)南:山東大學(xué)機(jī)械工程學(xué)院,2012.
[4] 田麗華,曾航.基于COM組件的MATLAB與VC++混合編程[J].科技創(chuàng)新導(dǎo)報,2009(31):27-28.
[5] 北京恒潤科技公司.S-Function的編寫[M].北京:北京恒潤科技公司,2010:33-53.
[6] 齊振恒,孫中杰,李濤.RTW嵌入式代碼自動生成機(jī)制與代碼結(jié)構(gòu)分析[J].計算機(jī)測量與控制,2010,18(3):639-642.
[7]HuJinhui,HuDabin,XiaoJianbo.StudyofReal-TimeSimulationSystemBasedonRTWandItsApplicationinWarshipSimulator[C].TheNinthInternationalConferenceonElectronicMeasurement&Instruments,2009:966-970.
[8] 劉杰.基于模型的設(shè)計—MCU篇[M].北京:北京航空航天大學(xué)出版社,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?!昂烁呋敝卮髮m?2009ZX01038-002-002)。馮輝宗,教授,主研領(lǐng)域:汽車電子控制系統(tǒng),發(fā)動機(jī)控制。朱澎,碩士生。蔣建春,副教授。
TP391
ADOI: 10.3969/j.issn.1000-386x.2016.03.052