新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 時間觸發 合作式調度器 編程模式

        時間觸發 合作式調度器 編程模式

        作者: 時間:2013-10-11 來源:網絡 收藏


        1.2 使用“”進行編程

        ”的核心是建立一個基丁的合作式的任務調度器,在系統中盡量減少事件觸發(減少中斷的使用),系統通過任務調度器完成各任務的調度執行,下面是“時間觸發”的典型程序結構:

        系統中每個任務都定義了優先級、任務循環周期和任務延遲時間,系統定時器中斷程序SCH Updatc()按設定的節拍對任務隊列進行刷新,在超級大循環中只執行任務調度器SCH_Dispatch_Tasks(),根據任務隊列的狀念安排任務的執行。

        這種編程結構避免了超級大循環結構循環時間隨代碼量的增加而線性增加的問題,但是由于任務是不可剝奪的,一旦任務啟動執行,任務調度器只有在當前任務完成后才有機會執行,這就要求每個任務占用CPU的時間不能太長,否則將影響整個系統的響應速度。所以,FFT運算在這種編程模式下還是必須進行有效的拆分,否則就必須提高CPU的檔次或使用可剝奪型的搶先式RTOS,這勢必造成系統成本的增加。那么有沒有更好的解決辦法呢?

        下面的編程結構塒“時間觸發編程模式”進行了改進,使之在不提高硬件成本的情況下,使編程人員更直觀地定義任務,減少任務特性對系統程序結構的沖擊,使程序結構簡單、明了并提高系統的實時響應速度。

        2 對“時間觸發編程模式”的改進

        根據多年嵌入式系統編程的經驗,通常嵌入系統的任務可以劃分成3種類型:

        ①及時型任務。這類任務是事件觸發型的,一旦事件發生,系統必須在限定的時間內進行響應,對這類任務,最自然的方法就是使用中斷來完成,即定義成“前后臺方式”中的后臺任務。

        ②周期型任務。這類任務是時間觸發式周期型的,系統必須保證在指定的周期內執行任務,“時間觸發編程模式”可以很好地滿足這類任務的需求。

        ③背景型任務。這類任務是非實時型的,實時性不是非常重要,系統在運行過程中可隨時中斷這類任務以便執行前兩類任務,系統只要能充分利用資源盡最大可能快速完成這類任務即可,這類任務最適合定義成“前后臺方式”中的前臺任務。

        根據以上任務分類,對“時間觸發編程模式”的改進可概括成以下需求:

        ◆任務分3類,1類任務優先級最高,3類任務優先級最低;
        ◆高優先級的任務可中斷低優先級任務的執行,同級的任務之間不可相互剝奪;
        ◆實際沒計中為提高系統的可預測性,應盡量減少1類任務的數量及1類任務的執行時間;
        ◆為降低系統資源的占用,系統不給任務劃分單獨的堆棧空間。

        以上改進的本質是設計3個優先級的簡單的任務調度機制,高優先級的任務可中斷低優先級的任務,同優先級的任務之間不能相互剝奪,該調度機制不為每個單獨的任務保存任務上下文和單獨的堆棧,這樣可以減少該編程模式對系統資源的需求。

        可剝奪式RTOS中的一個高優先級任務中斷一個低優先級的任務時,會保存好低優先級任務的上下文并把該低優先級任務的局部變量保存在本任務單獨的堆棧中,如果系統不給任務分配單獨的堆棧,如何保證高優先級任務退出后,低優先級任務執行環境的恢復呢?

        對這個問題,可以借鑒中斷的處理機制用以下辦法予以解決:

        ①在系統中設計一個定時中斷函數,該函數的功能就是執行周期性任務的調度,該定時中斷在所有中斷中優先級最低。

        ②在系統中設計另一個定時中斷函數,該函數的功能是刷新周期型任務的任務管理隊列,為任務調度提供支持,本定時中斷函數的優先級在系統中次低。

        ③周期型任務就是一個函數,該函數入口的第一個操作是開中斷,允許任務執行期間被中斷以便響應及時型任務。

        ④背景型任務就是在主函數超級循環中執行的代碼,該代碼可隨時被及時型和周期型任務中斷,當系統沒有及時型任務和周期型任務時才循環執行背景型任務的代碼。

        通過以上措施,“改進型時間觸發編程模式”的程序結構如下:


        結語


        使用“改進型時間觸發編程模式”進行小型嵌入式系統編程,就像使用RTOS進行編程一樣,設計者規劃好任務后,就可以專心于每個任務的設計,任務對處理器時間的占用可以由系統統一管理,減少任務之間的耦合,使產品的程序設計和改動都變得簡潔清楚。使用該編程模式很好地解決了譬裝式智能配電儀表所面臨的復雜的設計問題,證明該方法簡單有效。目前該設計模式僅僅設計了任務調度器,任務間的變量傳遞還需要使用全局變量,如果能加入信號量和消息機制,那么該模式將更加完善。


        上一頁 1 2 下一頁

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 图们市| 苍南县| 达孜县| 新宾| 神农架林区| 丰都县| 苏尼特右旗| 普定县| 湄潭县| 吴堡县| 亚东县| 新和县| 临高县| 仪征市| 兴化市| 宾川县| 邳州市| 隆化县| 沙坪坝区| 孟州市| 福海县| 招远市| 宁陕县| 鄂伦春自治旗| 娱乐| 永兴县| 永平县| 平安县| 灵武市| 宝坻区| 磴口县| 湖州市| 海盐县| 饶河县| 新田县| 旌德县| 孙吴县| 新巴尔虎左旗| 五台县| 策勒县| 莱阳市|