基于Simulink的OSEK嵌入式軟件開(kāi)發(fā)方法
①mdlInitializeSizes,用于細(xì)化SimStruct結(jié)構(gòu)中不同參數(shù)的維數(shù)(SimStruct是指Simulink數(shù)據(jù)結(jié)構(gòu),Sim-Struct及其相關(guān)的宏定義參見(jiàn)Matlab目錄下文件sim-strue.h)。
②mdlInitializeSampleTimes,用于細(xì)化該模塊的采樣時(shí)間。
③mdlOutputs::對(duì)輸入設(shè)備來(lái)講,從硬件中讀取值加以計(jì)算并傳遞到模塊輸出端;對(duì)輸出設(shè)備而言,從上流模塊讀取數(shù)據(jù),加以處理并寫(xiě)回硬件。
文件block.tlc用來(lái)控制代碼生成過(guò)程,通過(guò)相應(yīng)函數(shù)將語(yǔ)句寫(xiě)入生成的源文件中,代碼段3是一個(gè)例子。文件中使用的函數(shù)主要包括:%function BlockTypeSetup(block,system)void、%function Start(block,system)Output、%function Outputs本文引用地址:http://www.104case.com/article/152446.htm
4 應(yīng)用實(shí)例
圖5是一個(gè)簡(jiǎn)單的應(yīng)用。其中建立了兩個(gè)任務(wù),任務(wù)ADC_SUM每0.1 S執(zhí)行1次,任務(wù)ADC_GPIO每0.5 S執(zhí)行1次。第一個(gè)任務(wù)包含一個(gè)ADC S函數(shù)模塊。該S函數(shù)屬輸入設(shè)備,并被封裝成具有圖5所示的參數(shù)輸入界面;第二個(gè)任務(wù)包含另外一個(gè)S函數(shù)模塊,GPIO,在這個(gè)應(yīng)用中為輸出模塊。
像第二部分描述的一樣,算法可以進(jìn)行仿真。仿真完成后可通過(guò)RTW生成代碼(本文選擇osekworks.tlc為系統(tǒng)TLC文件,并對(duì)該文件進(jìn)行了適當(dāng)修改)。生成的源代碼(包括*.c源文件和*.h頭文件)可以在Keil C166環(huán)境下聯(lián)合編譯并進(jìn)行軟件調(diào)試運(yùn)行,如圖6所示,這樣也便于集成傳統(tǒng)手動(dòng)開(kāi)發(fā)流程中成熟的算法代碼。最終圖6 Keil C166環(huán)境下編譯帶μo/os―ll的生成源代碼代碼可在目標(biāo)硬件上運(yùn)行。
5 結(jié) 論
目前越來(lái)越多的汽車電子系統(tǒng)的開(kāi)發(fā)借助Matlab/Simulink,并且其已變成標(biāo)準(zhǔn)的開(kāi)發(fā)工具。本文提出的軟件開(kāi)發(fā)方法基于Sireulink環(huán)境和OSEK OS規(guī)范。在Simulink環(huán)境下開(kāi)發(fā)的算法可以結(jié)合OSEK RTOS(本文為修改過(guò)的μC/OS-II)直接應(yīng)用到目標(biāo)硬件上。該方法已通過(guò)實(shí)例進(jìn)行了驗(yàn)證,與傳統(tǒng)方法比較極大地縮短了開(kāi)發(fā)時(shí)間。
評(píng)論