新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 基于Simulink的OSEK嵌入式軟件開發方法

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

        作者: 時間:2009-06-30 來源:網絡 收藏

        對于生成的源代碼可對其手動添加需要的ISR,或者整合一些成熟的C算法代碼,然后在Keil環境下進行編譯,生成可執行文件。下面將model.mdl看作應用程序來討論。應用程序主要完成兩類任務,周期性任務和事件驅動型任務。后者通常以ISR處理。
        為了使模型能在RTOS中執行,必須將其劃分成不同的任務。Targetlink中的任務劃分如圖3所示。TargetLink有兩種劃分方式,默認方式和自定義方式。默認方式下,TargetLink將模型中所有周期性的具有相同采樣時間的子系統劃歸為獨立任務,具有相同觸發源的觸發子系統結合在一起,要么和觸發源一起歸為同一任務,要么獨立成為新的任務。自定義方式下,用戶通過在子系統中添加特殊的“任務模塊”(見圖3中的“TaskA”、“Task B”、“Task C”)來任意地劃分任務。

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

        3 軟件運行環境的開發
        3.1 順應性開發
        近來已有很多商業嵌入式操作系統符合規范,像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/環境下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中出現的主要函數有:

        linux操作系統文章專題:linux操作系統詳解(linux不再難懂)


        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 郴州市| 武宁县| 皋兰县| 麻栗坡县| 浪卡子县| 蚌埠市| 洛南县| 丁青县| 洛隆县| 龙海市| 枣阳市| 阳城县| 名山县| 介休市| 辛集市| 阳信县| 平邑县| 罗城| 滕州市| 澜沧| 大名县| 即墨市| 新宁县| 泽库县| 宿迁市| 天峨县| 阿瓦提县| 灵璧县| 通许县| 湘西| 疏勒县| 黄骅市| 太原市| 清河县| 玉龙| 绥德县| 长葛市| 锡林浩特市| 宜昌市| 天台县| 静海县|