Matlab/RTW EC面向MC9S12D64的自動(dòng)代碼生成
摘要:傳統的電控軟件開(kāi)發(fā)模式已無(wú)法滿(mǎn)足日益龐大、復雜的汽車(chē)電控系統的開(kāi)發(fā)要求,基于模型的開(kāi)發(fā)方法以及自動(dòng)代碼生成技術(shù)在汽車(chē)嵌入式軟件開(kāi)發(fā)中得到越來(lái)越廣泛的應用。本文介紹使用Matlab/Real-Time Workshop Embedded Coder(Matlab/RTW EC)將Simulink控制模型生成C代碼以及生成代碼與Freescale MC9S12D64單片機底層代碼的集成方法,通過(guò)測試驗證了生成代碼的有效性。
本文引用地址:http://dyxdggzs.com/article/201609/305079.htm引言
隨著(zhù)汽車(chē)電子控制系統的日益復雜化,以及用戶(hù)對產(chǎn)品安全性、可靠性的要求,嵌入式應用的開(kāi)發(fā)難度與代碼量都在迅速增加。目前,一臺中高檔汽車(chē)的軟件控制代碼就超過(guò)了500萬(wàn)行,通用雪佛蘭Volt整車(chē)的代碼量超過(guò)1 000萬(wàn)行,而一輛功能先進(jìn)的醫療急救車(chē)甚至需要超過(guò)5 000萬(wàn)行的軟件代碼,而且隨著(zhù)設計內容的增加、多變的新特征、模糊的設計參數以及用戶(hù)不斷增加的需求,程序員的勞動(dòng)量大大增加,傳統的手工編程方式越來(lái)越不能適應現代汽車(chē)電控系統的設計開(kāi)發(fā)要求。
Matlab/Real-Time Workshop Embedded Coder(Matlab/RTW EC)是MathWorks公司提供的嵌入式代碼自動(dòng)生成工具,它能夠快速地將Matlab/Simulink控制器模型自動(dòng)生成優(yōu)化的、可移植的產(chǎn)品級C代碼,并根據特定的目標配置自動(dòng)生成嵌入式系統實(shí)時(shí)應用程序,從而大大減輕軟件工程師的工作量,縮短嵌入式系統的開(kāi)發(fā)周期,提高開(kāi)發(fā)效率。本文以Freescale MC9S12D64單片機為目標芯片,說(shuō)明從Simulink控制模型生成目標嵌入式代碼的方法。
1 基于模型的設計
基于模型的設計是利用計算機建模仿真技術(shù),快速完成嵌入式產(chǎn)品等產(chǎn)品開(kāi)發(fā)過(guò)程中核心算法的開(kāi)發(fā)和驗證工作,利用自動(dòng)代碼生成技術(shù)快速完成產(chǎn)品開(kāi)發(fā)中的邏輯功能、處理算法的實(shí)現,同時(shí)利用模型的方法構造出被控對象,方便、快捷、大量重復地進(jìn)行產(chǎn)品控制效果的驗證工作。相比于傳統的開(kāi)發(fā)模式,基于模型的設計開(kāi)發(fā)流程具有以下一些優(yōu)點(diǎn):
①在統一的開(kāi)發(fā)測試平臺上,讓設計從需求分析階段就開(kāi)始驗證與確認,并做到持續不斷地驗證與測試,讓設計的缺陷盡量暴露在開(kāi)發(fā)的初級階段。
②讓工程師把主要精力放在算法和測試用例的研究上,嵌入式C代碼的生成與驗證留給計算機去自動(dòng)完成。
③模型的復用性好,易于維護和移植。
④大大縮短開(kāi)發(fā)周期并降低開(kāi)發(fā)成本。

圖1為基于模型的設計開(kāi)發(fā)流程。在基于模型的設計方法中,系統工程師首先要建立一個(gè)系統模型來(lái)精確、無(wú)歧義地描述用戶(hù)的需求,創(chuàng )建一個(gè)可執行、可跟蹤的技術(shù)規范,并在系統模型與需求之間建立雙向鏈接。在整個(gè)開(kāi)發(fā)過(guò)程中,工程師利用測試用例追蹤系統級模型和需求,了解系統模型的功能覆蓋度。這些測試通常包括以下三種:
①軟件在環(huán)測試(Software-in-the-Loop,SIL)是對模型生成的代碼或者手寫(xiě)代碼進(jìn)行非實(shí)時(shí)仿真,目的是為了驗證生成的代碼和模型在功能上的等效性。
②處理器在環(huán)測試(Processor-in-the-Loop,PIL)是將自動(dòng)生成的C代碼下載到目標處理器中,與被控對象一起進(jìn)行非實(shí)時(shí)的聯(lián)合仿真,目的是為了測量模型生成的代碼在目標處理器上的運行時(shí)間,即檢查運行速度和資源消耗。
③硬件在環(huán)測試(Hardware-in-the-Loop,HIL)是把被控對象的模型生成C代碼并編譯成可執行的文件放到工控機上運行,然后把控制器和工控機通過(guò)線(xiàn)|連接,實(shí)現閉環(huán)控制,檢查整個(gè)系統功能。
顯然,算法的實(shí)現是聯(lián)系系統模型和在環(huán)測試驗證的重要紐帶,這其中所涉及的代碼自動(dòng)生成技術(shù)是基于模型開(kāi)發(fā)方法的關(guān)鍵技術(shù)之一。自動(dòng)代碼生成的基本流程包括:運行Model Advisor進(jìn)行模型檢查、配置代碼生成選項、生成代碼、檢查生成的代碼及報告以及測試生成的代碼等5個(gè)環(huán)節。

生成代碼的過(guò)程如圖2所示。用戶(hù)在Matlab/Simulink/Stateflow建立的算法模型經(jīng)過(guò)Simulink編譯器生成rtw中間文件;rtw文件是一個(gè)描述整個(gè)模型的結構體文本,包含模型中的參數、變量、模塊名稱(chēng)以及為代碼生成所做的各種配置,rtw文件經(jīng)過(guò)目標語(yǔ)言編譯器(Target Lang uage Compiler,TLC)生成C語(yǔ)言代碼,最后通過(guò)C編譯器得到最終的可執行程序。
2 流水燈模型建立及嵌入式代碼生成
流水燈Simulink功能驗證模型,通過(guò)設置脈沖發(fā)生函數的周期和占空比,使LED燈按照一定的時(shí)間間隔順時(shí)針?lè )较蜉喠鼽c(diǎn)亮。示意圖略一一編者注。
將流水燈功能驗證模型中的脈沖生成器和Goto模塊分別使用In、Out模塊替換后得到的自動(dòng)代碼生成模型如圖3所示。

在Configuration Parameters中對代碼生成過(guò)程進(jìn)行相關(guān)的配置并指定變量的數據類(lèi)型后,Matlab/RTW EC依據上述的流水燈控制模型自動(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提供了算法函數調用的樣例程序,它包括main()、rt_OneStep()函數。LightsCtr.c包含了Lights Ct rinitialize()、LightsCtrstep()、LightsCtr_terminate()函數,是整個(gè)模型的算法實(shí)現代碼。
3 應用層底層代碼集成
Matlab/RTW EC生成的應用層代碼和特定芯片的驅動(dòng)代碼集成目前主要有兩種方式:一種方式是在建模過(guò)程中,將驅動(dòng)程序封裝為S函數模塊,代碼自動(dòng)生成的過(guò)程中建立相應芯片的TLC模板文件,實(shí)現一鍵從模型到編澤代碼下載到控制器芯片中。第二種方式是在集成開(kāi)發(fā)環(huán)境(Integrated Development Environment,IDE)中手工進(jìn)行代碼集成。
在產(chǎn)品化的項目開(kāi)發(fā)中,采用第一種方式集成代碼,需要對底層驅動(dòng)建模,存在以下的困難:①底層驅動(dòng)在Simulink環(huán)境下不能仿真;②底層驅動(dòng)建模需要熟悉TLC腳本語(yǔ)言;③產(chǎn)品化項目的底層軟件往往很大,開(kāi)發(fā)一個(gè)安全、可靠的底層模塊庫,針對特定的目標板定制TLC文件等,都需要大量的時(shí)間投入,不易操作。
評論