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