国产毛片a精品毛-国产毛片黄片-国产毛片久久国产-国产毛片久久精品-青娱乐极品在线-青娱乐精品

基于Simulink的OSEK嵌入式軟件開發方法

發布時間:2010-2-22 13:37    發布者:李寬
關鍵詞: OSEK , Simulink , 嵌入式 , 軟件開發
引言

現在V型開發模式已成為使用最廣的汽車軟件開發流程標準。這一標準流程得到許多工具的支撐,有來自Mathworks的工具,如用于功能開發和仿真的 Matlab/Simulink/Stateflow,用于自動代碼生成的Real—TimeWorkshop,以及來自dSpace的工具。硬件有用于快速控制原型開發的AutoBox和用于硬件在環測試的模塊,軟件有產品級代碼生成器TargetLink。它們在加快開發周期的同時,也提高了代碼的可靠性。

平臺軟件方面,OSEK OS是廣泛應用于汽車電子領域的嵌入式操作系統(RTOS)規范。它定義了一些基本的系統服務,比如任務處理、中斷服務程序(ISR)處理、資源管理、事件處理以及報警服務等。

由上可知,將Matlab/Simulink的建模和仿真環境在代碼生成階段與OSEK OS規范相結合,將極大地方便開發。這方面Matlab已有針對OSEK/VDX的嵌入式對象模塊,TargetLink也實現了部分結合,但兩者都局限于特定的硬件,不能應用于不同的控制器和實時操作系統。

1 嵌入式軟件開發理念

符合基于模型的開發和OSEK規范的軟件架構如圖1所示。以英飛凌XC164系列單片機為例,硬件層的核心部件由RTOS提供的系統服務進行管理,外設部件由相應的驅動程序驅動。

中間層(軟件運行環境)包括兩部分,操作系統和硬件驅動。操作系統采用順應OSEK規范的μC/OS-II(見3.1),硬件外設驅動開發在后面作介紹。

應用程序指的是與硬件無關的軟件,含控制算法和中斷服務程序(ISR)。控制算法完成控制任務,形式一般為Simulink模型。該模型可以和被控對象模型一起在閉環狀態下完成功能仿真,同時也可以在代碼生成階段與硬件驅動以及操作系統API一起生成可在目標硬件上運行的程序。這里ISR可以有兩種類型,可以是手寫的C代碼,也可以是Simulink模型中的觸發子系統。在該子系統中的觸發源是圖1中所示的硬件層外設。


                           
2 MATLAB環境下代碼生成流程

實時工作空間(Real-Time Workshop,RTW)代碼生成流程包含下面幾部分。

①仿真和模型文件(model.mdl)。通過手動添加C語言S函數可以擴展Simulink模型庫。

②中間描述文件(model.rtw)。該文件描述了模型中系統和各模塊以及它們之間的聯系,可以看作是模型文件的分層式的描述庫文件。

③目標語言編譯器(TLC)文件。目標語言編譯器讀取model.rtw文件中的信息,將模型最終轉化成源代碼。

TLC文件有兩種形式,系統TLC文件和模塊TLC文件。前者控制整個模型的代碼生成,比如可以指定模型生成C語言源代碼,而后者僅針對對應的模塊。對每個手動添加的C語言S函數對象,必須有對應的模塊TLC文件,才可用于代碼生成。

④生成的源代碼。圖2中列舉了生成的主要源代碼,其中model.c是model.mdl對應生成的算法源代碼。



對于生成的源代碼可對其手動添加需要的ISR,或者整合一些成熟的C算法代碼,然后在Keil環境下進行編譯,生成嵌入式可執行文件。下面將 model.mdl看作應用程序來討論。嵌入式應用程序主要完成兩類任務,周期性任務和事件驅動型任務。后者通常以ISR處理。

為了使Simulink模型能在RTOS中執行,必須將其劃分成不同的任務。Targetlink中的任務劃分如圖3所示。TargetLink有兩種劃分方式,默認方式和自定義方式。默認方式下,TargetLink將模型中所有周期性的具有相同采樣時間的子系統劃歸為獨立任務,具有相同觸發源的觸發子系統結合在一起,要么和觸發源一起歸為同一任務,要么獨立成為新的任務。自定義方式下,用戶通過在子系統中添加特殊的“任務模塊”(見圖3中的 “TaskA”、“Task B”、“Task C”)來任意地劃分任務。

     

鑒于本開發是基于Matlab中針對OSEK/VDX的嵌入式對象模塊,TargetLink中的任務劃分方式不能被直接移植,因此采用函數調用子系統 (function-callsubsystem)作為獨立任務的標識,如圖4中的Task A和Task B模塊。同Simulink中其他離散模塊一樣,函數調用發生器有自己的采樣時間,用以表明該子系統被執行的頻度。模型中也會有一些其他模塊不在函數調用子系統內,如圖4中的定時模塊,以便與任務模塊相區分。圖4中ISR的部分采用觸發子系統,當觸發條件滿足時該子系統被執行。



3 軟件運行環境的開發

3.1 OSEK順應性開發

近來已有很多商業嵌入式操作系統符合OSEK規范,像Wind River的OSEKWorks、Elektrobit的Pro-OSEK,還有ETAS的RTA-OSEK。鑒于成本方面的考慮,采用內核源代碼開放的 μC/OS-II。

μC/0S-II和OSEK規范有許多共同點,比如都支持基于任務優先級的占先式調度,都有很好的可移植性和可裁剪性。但也存在不同之處,比如OSEK規范中的BCC2和ECC2順應等級都支持同一優先級下的多個任務,而μC/OS-II僅支持同一優先級下一個任務;OSEK規范對互斥資源的訪問采用最高優先級限度協議,而μC/0S-II采用互斥信號量機制。參考文獻[6]在基于μC/OS-II的OSEK順應性移植方面進行了實際的開發。本文采用修改過的μC/OS-II作為OSEK的一個操作系統實例,來討論模型的定時機制。

3.2 定時機制

Matlab/Simulink環境下RTw Embedded Coder默認采用多速率、多任務求解器來處理多采樣時間的模型。在生成的model.c文件中,有函數rate_monotonic_sehed- uler()。該函數用于維護調度計數器,處理模型中不同采樣時間模塊的運行順序。它實際上就是操作系統中經常提到的單調執行率調度法(RMS)。

μC/OS-II中函數OSTickISR()提供時間基準服務,用于判斷任務等待以及超時。這個中斷服務程序通常由硬件計時器驅動,中斷頻率在 10~100 Hz。在函數0S-TickISR()中調用了OSTimeTick()用于處理任務等待。

函數OSTicklSR()的代碼見代碼段1:

OSTicklSR PROC INTERRUPT UCOS_OSTicklSR=Ox22



為了將兩者的定時策略相結合,可進行兩處修改。第一,在μc/OS-II中保留函數OSTickISR(),但是中斷頻率不是如代碼段1中所示的10 ms那樣的固定值,而對不同的應用程序采用浮動的中斷頻率。這里取model.mdl中所有采樣時間的最大公約數作為模型的時間基準。這樣可以最大限度地減小系統因周期性的時鐘中斷OS—TickISR()而造成的資源開銷。第二,創建一個新任務HighstPrioTask()。該任務具有最高的優先級,即任務控制塊TCB中OSTCBPrio=0,這樣在每次產生任務調度時都能確保該任務獲得CPU使用權。該任務可理解為在圖4中的任務子系統和定時模塊之上的高一級的調度任務。其偽代碼見代碼段2(Pseudocode of added task High-


3.3 創建自定義驅動模塊

圖1中軟件運行環境的自定義開發可以分為兩部分,一部分是實時操作系統的API驅動庫的自定義開發,另一部分是XCl64系列單片機的設備驅動模塊開發。兩者都可利用參考文獻[4]中提及的“自定義設備驅動”來描述。在“自定義設備驅動”的開發中,開發者通過Matlab提供的S一函數機制,為每個模塊需要手動編寫兩個源文件,即block.c和block.tlc。其中block.c負責在仿真階段進行模塊初始化及模塊輸出的計算,同時在代碼生成階段通過函數mdlRTW為model.rtw傳遞所需的參數。文件block.C中出現的主要函數有:

①mdlInitializeSizes,用于細化SimStruct結構中不同參數的維數(SimStruct是指Simulink數據結構,Sim- Struct及其相關的宏定義參見Matlab目錄下文件sim-strue.h)。

②mdlInitializeSampleTimes,用于細化該模塊的采樣時間。

③mdlOutputs::對輸入設備來講,從硬件中讀取值加以計算并傳遞到模塊輸出端;對輸出設備而言,從上流模塊讀取數據,加以處理并寫回硬件。

文件block.tlc用來控制代碼生成過程,通過相應函數將語句寫入生成的源文件中,代碼段3是一個例子。文件中使用的函數主要包括:%function BlockTypeSetup(block,system)void、%function Start(block,system)Output、%function Outputs



4 應用實例

圖5是一個簡單的應用。其中建立了兩個任務,任務ADC_SUM每0.1 S執行1次,任務ADC_GPIO每0.5 S執行1次。第一個任務包含一個ADC S函數模塊。該S函數屬輸入設備,并被封裝成具有圖5所示的參數輸入界面;第二個任務包含另外一個S函數模塊,GPIO,在這個應用中為輸出模塊。



像第二部分描述的一樣,算法可以進行仿真。仿真完成后可通過RTW生成代碼(本文選擇osekworks.tlc為系統TLC文件,并對該文件進行了適當修改)。生成的源代碼(包括*.c源文件和*.h頭文件)可以在Keil C166環境下聯合編譯并進行軟件調試運行,如圖6所示,這樣也便于集成傳統手動開發流程中成熟的算法代碼。最終圖6 Keil C166環境下編譯帶μo/os—ll的生成源代碼代碼可在目標硬件上運行。



5 結論

目前越來越多的汽車電子系統的開發借助Matlab/Simulink,并且其已變成標準的開發工具。本文提出的軟件開發方法基于Sireulink環境和OSEK OS規范。在Simulink環境下開發的算法可以結合OSEK RTOS(本文為修改過的μC/OS-II)直接應用到目標硬件上。該方法已通過實例進行了驗證,與傳統方法比較極大地縮短了開發時間。

參考文獻

1. Henning Wallentowitz Konrad Reif:Handbuch-Kraftfahrzeugelektronik,Grundlagen,Komponenten,Systeme,Anwendung 2006
2. OSEK OS 2.2.1.OSEK/VDX Operation System Specification 2.2.1
3. TIAN Shuo.LIU Yuan.XIA Wenchuan.LI Jianqiu.YANG Minggao Advanced ECU Software Development Method for Fuel Cell Systems [期刊論文] -清華大學學報自然科學版(英文版)2005(5)
4. Real-Time Workshop User's Guide
5. K?ster Lutz.Thomsen Thomas.Stracke Ralf Connecting Simulink to OSEK:Automatic Code Generation For Real-Time Operating Systems with TargetLink 2008
6. 顧劍杰 基于μC/OS-II的OSEK順應性開發研究 2008
7. Real-Time Workshop Embedded Coder User's Guide
8. Labrosse Jean J.邵貝貝 嵌入式實時操作系統μC/OS-II 2005

作者:同濟大學 張永博 沈勇 來源:單片機與嵌入式系統應用 2009(5)
本文地址:http://m.qingdxww.cn/thread-8398-1-1.html     【打印本頁】

本站部分文章為轉載或網友發布,目的在于傳遞和分享信息,并不代表本網贊同其觀點和對其真實性負責;文章版權歸原作者及原出處所有,如涉及作品內容、版權和其它問題,我們將根據著作權人的要求,第一時間更正或刪除。
您需要登錄后才可以發表評論 登錄 | 立即注冊

廠商推薦

  • Microchip視頻專區
  • 實時控制解決方案的正確選擇——數字信號控制器(DSC)或通用MCU
  • PIC32CK SG單片機——輕松滿足新型網絡安全要求
  • 探索PIC16F13145 MCU系列——快速概覽
  • PIC32CM LS00 Curiosity Pro評估工具包
  • 貿澤電子(Mouser)專區

相關視頻

關于我們  -  服務條款  -  使用指南  -  站點地圖  -  友情鏈接  -  聯系我們
電子工程網 © 版權所有   京ICP備16069177號 | 京公網安備11010502021702
快速回復 返回頂部 返回列表
主站蜘蛛池模板: 人人干操| 性欧美丰满xxxx性久久久| 亚洲三级黄色片| 青草视频网址| 色噜噜狠狠色综合欧洲| 青草视频入口 在线观看| 秋霞手机入口二日韩区| 亚洲乱亚洲乱妇24p| 午夜在线成人| 欧美日韩一二三区| 欧美区亚洲区| 香蕉视频97| 人人爱人人艹| 亚洲国产精品自在在线观看| 亚洲狠狠97婷婷综合久久久久 | 欧美破处在线| 亚洲毛片在线播放| 青青青国产在线| 日本天堂网址| 欧美亚洲欧美区| 青青99| 日本福利视频网站| 香蕉一区二区三区观| 日本成人免费在线观看| 三级a毛片| 欧美亚洲春色系列| 欧美激情精品久久久久久不卡| 日本成人三级| 日韩精品中文字幕一区三区| 日韩免费在线看| 人人澡人摸人人爽歪歪| 亚洲国产99在线精品一区69堂| 一级黄色片在线播放| 亚洲精品乱码久久久久久v| 欧美日韩国产一区二区三区不卡| 日本免费www| 一级毛毛片| 人人舔人人爱| 一级录像| 五月天亚洲视频| 青草草在线观看|