Matlab/RTW EC面向MC9S12D64的自動(dòng)代碼生成
摘要:傳統(tǒng)的電控軟件開發(fā)模式已無(wú)法滿足日益龐大、復(fù)雜的汽車電控系統(tǒng)的開發(fā)要求,基于模型的開發(fā)方法以及自動(dòng)代碼生成技術(shù)在汽車嵌入式軟件開發(fā)中得到越來越廣泛的應(yīng)用。本文介紹使用Matlab/Real-Time Workshop Embedded Coder(Matlab/RTW EC)將Simulink控制模型生成C代碼以及生成代碼與Freescale MC9S12D64單片機(jī)底層代碼的集成方法,通過測(cè)試驗(yàn)證了生成代碼的有效性。
本文引用地址:http://butianyuan.cn/article/201609/305079.htm引言
隨著汽車電子控制系統(tǒng)的日益復(fù)雜化,以及用戶對(duì)產(chǎn)品安全性、可靠性的要求,嵌入式應(yīng)用的開發(fā)難度與代碼量都在迅速增加。目前,一臺(tái)中高檔汽車的軟件控制代碼就超過了500萬(wàn)行,通用雪佛蘭Volt整車的代碼量超過1 000萬(wàn)行,而一輛功能先進(jìn)的醫(yī)療急救車甚至需要超過5 000萬(wàn)行的軟件代碼,而且隨著設(shè)計(jì)內(nèi)容的增加、多變的新特征、模糊的設(shè)計(jì)參數(shù)以及用戶不斷增加的需求,程序員的勞動(dòng)量大大增加,傳統(tǒng)的手工編程方式越來越不能適應(yīng)現(xiàn)代汽車電控系統(tǒng)的設(shè)計(jì)開發(fā)要求。
Matlab/Real-Time Workshop Embedded Coder(Matlab/RTW EC)是MathWorks公司提供的嵌入式代碼自動(dòng)生成工具,它能夠快速地將Matlab/Simulink控制器模型自動(dòng)生成優(yōu)化的、可移植的產(chǎn)品級(jí)C代碼,并根據(jù)特定的目標(biāo)配置自動(dòng)生成嵌入式系統(tǒng)實(shí)時(shí)應(yīng)用程序,從而大大減輕軟件工程師的工作量,縮短嵌入式系統(tǒng)的開發(fā)周期,提高開發(fā)效率。本文以Freescale MC9S12D64單片機(jī)為目標(biāo)芯片,說明從Simulink控制模型生成目標(biāo)嵌入式代碼的方法。
1 基于模型的設(shè)計(jì)
基于模型的設(shè)計(jì)是利用計(jì)算機(jī)建模仿真技術(shù),快速完成嵌入式產(chǎn)品等產(chǎn)品開發(fā)過程中核心算法的開發(fā)和驗(yàn)證工作,利用自動(dòng)代碼生成技術(shù)快速完成產(chǎn)品開發(fā)中的邏輯功能、處理算法的實(shí)現(xiàn),同時(shí)利用模型的方法構(gòu)造出被控對(duì)象,方便、快捷、大量重復(fù)地進(jìn)行產(chǎn)品控制效果的驗(yàn)證工作。相比于傳統(tǒng)的開發(fā)模式,基于模型的設(shè)計(jì)開發(fā)流程具有以下一些優(yōu)點(diǎn):
①在統(tǒng)一的開發(fā)測(cè)試平臺(tái)上,讓設(shè)計(jì)從需求分析階段就開始驗(yàn)證與確認(rèn),并做到持續(xù)不斷地驗(yàn)證與測(cè)試,讓設(shè)計(jì)的缺陷盡量暴露在開發(fā)的初級(jí)階段。
②讓工程師把主要精力放在算法和測(cè)試用例的研究上,嵌入式C代碼的生成與驗(yàn)證留給計(jì)算機(jī)去自動(dòng)完成。
③模型的復(fù)用性好,易于維護(hù)和移植。
④大大縮短開發(fā)周期并降低開發(fā)成本。
圖1為基于模型的設(shè)計(jì)開發(fā)流程。在基于模型的設(shè)計(jì)方法中,系統(tǒng)工程師首先要建立一個(gè)系統(tǒng)模型來精確、無(wú)歧義地描述用戶的需求,創(chuàng)建一個(gè)可執(zhí)行、可跟蹤的技術(shù)規(guī)范,并在系統(tǒng)模型與需求之間建立雙向鏈接。在整個(gè)開發(fā)過程中,工程師利用測(cè)試用例追蹤系統(tǒng)級(jí)模型和需求,了解系統(tǒng)模型的功能覆蓋度。這些測(cè)試通常包括以下三種:
①軟件在環(huán)測(cè)試(Software-in-the-Loop,SIL)是對(duì)模型生成的代碼或者手寫代碼進(jìn)行非實(shí)時(shí)仿真,目的是為了驗(yàn)證生成的代碼和模型在功能上的等效性。
②處理器在環(huán)測(cè)試(Processor-in-the-Loop,PIL)是將自動(dòng)生成的C代碼下載到目標(biāo)處理器中,與被控對(duì)象一起進(jìn)行非實(shí)時(shí)的聯(lián)合仿真,目的是為了測(cè)量模型生成的代碼在目標(biāo)處理器上的運(yùn)行時(shí)間,即檢查運(yùn)行速度和資源消耗。
③硬件在環(huán)測(cè)試(Hardware-in-the-Loop,HIL)是把被控對(duì)象的模型生成C代碼并編譯成可執(zhí)行的文件放到工控機(jī)上運(yùn)行,然后把控制器和工控機(jī)通過線|連接,實(shí)現(xiàn)閉環(huán)控制,檢查整個(gè)系統(tǒng)功能。
顯然,算法的實(shí)現(xiàn)是聯(lián)系系統(tǒng)模型和在環(huán)測(cè)試驗(yàn)證的重要紐帶,這其中所涉及的代碼自動(dòng)生成技術(shù)是基于模型開發(fā)方法的關(guān)鍵技術(shù)之一。自動(dòng)代碼生成的基本流程包括:運(yùn)行Model Advisor進(jìn)行模型檢查、配置代碼生成選項(xiàng)、生成代碼、檢查生成的代碼及報(bào)告以及測(cè)試生成的代碼等5個(gè)環(huán)節(jié)。
生成代碼的過程如圖2所示。用戶在Matlab/Simulink/Stateflow建立的算法模型經(jīng)過Simulink編譯器生成rtw中間文件;rtw文件是一個(gè)描述整個(gè)模型的結(jié)構(gòu)體文本,包含模型中的參數(shù)、變量、模塊名稱以及為代碼生成所做的各種配置,rtw文件經(jīng)過目標(biāo)語(yǔ)言編譯器(Target Lang uage Compiler,TLC)生成C語(yǔ)言代碼,最后通過C編譯器得到最終的可執(zhí)行程序。
2 流水燈模型建立及嵌入式代碼生成
流水燈Simulink功能驗(yàn)證模型,通過設(shè)置脈沖發(fā)生函數(shù)的周期和占空比,使LED燈按照一定的時(shí)間間隔順時(shí)針方向輪流點(diǎn)亮。示意圖略一一編者注。
將流水燈功能驗(yàn)證模型中的脈沖生成器和Goto模塊分別使用In、Out模塊替換后得到的自動(dòng)代碼生成模型如圖3所示。
在Configuration Parameters中對(duì)代碼生成過程進(jìn)行相關(guān)的配置并指定變量的數(shù)據(jù)類型后,Matlab/RTW EC依據(jù)上述的流水燈控制模型自動(dòng)生成了ert_ main.c、LightsCtr.c、LightsCtr.h、LightsCtr_private.h、LightsCtr_types.h、LightsCtr_private.h、rt wty pes.h等6個(gè)文件。其中,ert_main.c提供了算法函數(shù)調(diào)用的樣例程序,它包括main()、rt_OneStep()函數(shù)。LightsCtr.c包含了Lights Ct rinitialize()、LightsCtrstep()、LightsCtr_terminate()函數(shù),是整個(gè)模型的算法實(shí)現(xiàn)代碼。
3 應(yīng)用層底層代碼集成
Matlab/RTW EC生成的應(yīng)用層代碼和特定芯片的驅(qū)動(dòng)代碼集成目前主要有兩種方式:一種方式是在建模過程中,將驅(qū)動(dòng)程序封裝為S函數(shù)模塊,代碼自動(dòng)生成的過程中建立相應(yīng)芯片的TLC模板文件,實(shí)現(xiàn)一鍵從模型到編澤代碼下載到控制器芯片中。第二種方式是在集成開發(fā)環(huán)境(Integrated Development Environment,IDE)中手工進(jìn)行代碼集成。
在產(chǎn)品化的項(xiàng)目開發(fā)中,采用第一種方式集成代碼,需要對(duì)底層驅(qū)動(dòng)建模,存在以下的困難:①底層驅(qū)動(dòng)在Simulink環(huán)境下不能仿真;②底層驅(qū)動(dòng)建模需要熟悉TLC腳本語(yǔ)言;③產(chǎn)品化項(xiàng)目的底層軟件往往很大,開發(fā)一個(gè)安全、可靠的底層模塊庫(kù),針對(duì)特定的目標(biāo)板定制TLC文件等,都需要大量的時(shí)間投入,不易操作。
評(píng)論