那曲檬骨新材料有限公司

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內(nèi)不再提示

基于μC/OS-II和Simulink開發(fā)環(huán)境實現(xiàn)OSEK順應性軟件的設計

電子設計 ? 來源:單片機與嵌入式系統(tǒng)應用 ? 作者:張永博,沈勇 ? 2020-09-08 18:32 ? 次閱讀

引言

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

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

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

1 嵌入式軟件開發(fā)理念

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

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

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

基于μC/OS-II和Simulink開發(fā)環(huán)境實現(xiàn)OSEK順應性軟件的設計

2 MATLAB環(huán)境下代碼生成流程

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

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

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

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

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

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

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

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

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

3 軟件運行環(huán)境的開發(fā)

3.1 OSEK順應性開發(fā)

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

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

3.2 定時機制

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

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

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

OSTicklSR PROC INTERRUPT UCOS_OSTicklSR=Ox22

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

3.3 創(chuàng)建自定義驅動模塊

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

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

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

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

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

4 應用實例

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

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

5 結論

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

責任編輯:gt

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • matlab
    +關注

    關注

    185

    文章

    2980

    瀏覽量

    231005
  • 仿真
    +關注

    關注

    50

    文章

    4124

    瀏覽量

    133991
  • 操作系統(tǒng)

    關注

    37

    文章

    6892

    瀏覽量

    123742
收藏 人收藏

    評論

    相關推薦

    μC/OS-II的特點

    的需要對它進行修改。缺點在于它缺乏必要的支持,沒有功能強大的軟件包,用戶通常需要自己編寫驅動程序,特別是如果用戶使用的是不太常用的單片機,還必須自己編寫移植程序。2.μC/OS-II是一個占先式的內(nèi)核
    發(fā)表于 07-15 14:51

    μC/OS-II的中斷按鍵怎么處理?

    μC/OS-II是一個完整的、可移植、可裁減的占先式實時多任務內(nèi)核。本文主要討論了μC/OS-II環(huán)境下中斷按鍵消抖處理及LCD多級菜單顯示
    發(fā)表于 03-23 08:13

    【干貨分享】μC/OS-II 軟件定時器的分析與測試

    的應用。在 μC/OS-II 2.83 及其以后的版本中,一個較大的變化就是增加了對軟件定時器的支持。這使得 μC/OS 實時操作系統(tǒng)的功能
    發(fā)表于 02-21 11:58

    μC/OS-II是什么?μC/OS-II有哪些應用?

    μC/OS-II的原理是什么?如何去改進μC/OS-II的調度算法?μC/OS-II有哪些應用?
    發(fā)表于 04-26 07:17

    如何實現(xiàn)μC/OS-II系統(tǒng)的移植?

    如何實現(xiàn)μC/OS-II系統(tǒng)的移植?
    發(fā)表于 04-28 06:01

    基于μC/OS-II的嵌入式音頻系統(tǒng)設計

    基于μC/OS-II的嵌入式音頻系統(tǒng)設計 Design of Embedded Audio Frequency System Based on μC/OS-II
    發(fā)表于 03-16 11:10 ?19次下載

    μC/OS-II 在Nios上的移植

    首先介紹嵌入式實時操作系統(tǒng)μC/OS-II 和Nios 嵌入式處理器, 分析μC/OS-II 移植對目標處理器的要求, 重點介紹μ
    發(fā)表于 03-08 09:31 ?90次下載

    μC OS-II 在Nios 上的移植1

    首先介紹嵌入式實時操作系統(tǒng)μC/OS-II 和Nios 嵌入式處理器, 分析μC/OS-II 移植對目標處理器的要求, 重點介紹μC/
    發(fā)表于 05-16 14:32 ?28次下載

    輕型PPP協(xié)議在μC/OS-II操作系統(tǒng)中的實現(xiàn)

    針對實時操作系統(tǒng)μC/OS-II 沒有自己的網(wǎng)絡協(xié)議棧,提出了基于ARM7TDMI 處理器的μC/OS-II 操作系統(tǒng)上輕型PPP 協(xié)議的設計與實現(xiàn)
    發(fā)表于 08-13 09:05 ?15次下載

    μC/OS-II在PC機上移植的設計與實現(xiàn)

    本文介紹了μC/OS-II移植到PC機上的過程,使μC/OS-II應用系統(tǒng)程序在PC機上脫離DOS或Windows環(huán)境運行。著重介紹了Boo
    發(fā)表于 09-02 08:51 ?14次下載

    μC/OS-II任務棧處理的改進設計

    已經(jīng)有不少的文章介紹了有關μC/OS-II這個實時內(nèi)核及其應用。在很多的處理器上,μC/OS-II都得到了應用。μC/
    發(fā)表于 04-18 22:12 ?1149次閱讀

    μC/OS-II在EP7312上的移植

    μC/OS-II在EP7312上的移植首先介紹μC/OS-II操作系統(tǒng)的特點,重點分析μC/OS-II
    發(fā)表于 06-16 11:24 ?1171次閱讀
    μ<b class='flag-5'>C</b>/<b class='flag-5'>OS-II</b>在EP7312上的移植

    縮短實時操作系統(tǒng)μC/OS-II中斷關閉時間的方法

    該方面的實現(xiàn),提高了μC/OS-II的性能,擴大了μC/OS-II的應用范圍,使得單邊及工程師能更好的利用μ
    發(fā)表于 05-06 11:43 ?1177次閱讀
    縮短實時操作系統(tǒng)μ<b class='flag-5'>C</b>/<b class='flag-5'>OS-II</b>中斷關閉時間的方法

    μC/OS-II中縮短中斷關閉時間方法

    筆者將以μC/OS-II實時內(nèi)核為例,通過對μC/OS-II的改進,向讀者描述一種縮短實時操作系統(tǒng)中斷關閉時間的方法。
    發(fā)表于 05-23 11:15 ?1221次閱讀
    μ<b class='flag-5'>C</b>/<b class='flag-5'>OS-II</b>中縮短中斷關閉時間方法

    μC/OS-II的多任務系統(tǒng)實時解析

    摘要 從產(chǎn)品研發(fā)的角度,針對小資源系統(tǒng)中使用C/OS-II的實時和優(yōu)先級關系進行了分析,提出了可刪除任務的靈活應用和可變大小任務棧的實現(xiàn)方法,對于并行任務使用共享資源的幾種情況給出了
    發(fā)表于 11-06 14:29 ?2次下載
    μ<b class='flag-5'>C</b>/<b class='flag-5'>OS-II</b>的多任務系統(tǒng)實時<b class='flag-5'>性</b>解析
    大众娱乐城| 网上百家乐危险| 德州扑克大小顺序| 至尊百家乐官网吕文婉| 德州扑克2| 百家乐官网网络游戏信誉怎么样 | 金杯百家乐官网的玩法技巧和规则 | 做生意买车白色风水| 大发888娱乐软件| 百家乐官网咋样赢钱| 冠通网络棋牌世界| 在线百家乐平台| 化德县| 广州百家乐牌具公司| 百家乐官网偷吗| 38坊| 百家乐透明出千牌靴| 路单百家乐官网的玩法技巧和规则| 大发888娱乐城| 百家乐体育博彩| 皇冠开户| 逍遥坊百家乐的玩法技巧和规则| 长江百家乐官网的玩法技巧和规则 | 百家乐官网设备电子路| 大发888手机下载| 24个招财方法| 百乐门| 新思维百家乐投注法| 百家乐官网技巧微笑心法| 澳门美高梅娱乐| 百家乐开发软件| 百家乐官网庄闲偏差有多大| 东莞市| 利都百家乐国际娱乐场开户注册 | 百家乐官网永利娱乐平台| 大发888中文版| 网络百家乐内幕| 易胜博百家乐官网作弊| 大发888王博| 澳门百家乐的玩法技巧和规则| 做生意摆放龙龟方向|