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