• <li id="00i08"><input id="00i08"></input></li>
  • <sup id="00i08"><tbody id="00i08"></tbody></sup>
    <abbr id="00i08"></abbr>
  • 新聞中心

    EEPW首頁 > 嵌入式系統 > 設計應用 > 通過任務分割提高嵌入式系統的實時性

    通過任務分割提高嵌入式系統的實時性

    作者: 時間:2010-01-15 來源:網絡 收藏


    3.1 對RTOS的分析與計算

    當然,長必須結合中所使用的內核,以及各的要求情況,進行必要的分析計算,才能保證的合理性和有效懷,具體的步驟如下:

    ①分析共有多少個,這些任務對的要求有多高,求出各個任務所要求的最小執行頻率f1,f2,f3……fn。

    ②計算目前各任務的實際執行時間t1,t2,t3……tn。

    ③確定中的長任務

    如果max(t1,t2,t3……tn)≤min(1/f1,1/f2,1/f3……1/fn)

    則此系統中不存在長任務。

    如果max(t1,t2,t3……tn)>min(1/f1,1/f2,1/f3……1/fn)

    則存在長任務,而且執行時間為max(t1,t2,t3……tn)的那個任務就是要找的長任務。

    ④分析此長任務是否需要

    分析一下是什么原因導致執行的時間過長,這個時間還能夠程序的優化來縮短?如果能,則不需要進行任務分割;否則要對這個長任務進行分割。

    3.2 任務分割

    常用的任務分割的方法有以下兩種:

    ①將長任務按功能分為若干個小模塊,每一個模塊構成一個小任務,每個小任務執行一個相對獨立的功能,且要保證執行時間tmin(1/f1,1/f2,1/f3……1/fn)。各個任務被內核順序調用,合起來完成整個任務的功能。

    ②有的長任務比較特殊,例如鍵盤任務和動態 LED顯示任務,很難按照方法1所說的把它分成若干個功能相對獨立的小模塊。這時,一般是按照方便保存現場信息原則,強制將其分割成若干個小任務,每個任務在min(1/f1,1/f2,1/f3……1/fn)時間內主動保存現場信息、放棄CPU的控制權,等到再次被內核調度時繼續執行。

    這種分割方法相對復雜,各任務之間界限不是很明顯,看似未經分割,但實際上它確實是由多次任務中斷來完成。下面就以這種分割方法為例具體說明。

    4 實例分析

    4.1 系統介紹

    在此,系統的硬件基礎是基于 MC68HC908GP32單片機系統的,用其普通I/O口作為矩陣式鍵盤的輸入輸出引腳;軟件基礎是在MC68HC908GP32中運行 Motorola公司的Joanne Santangeli編寫的基于時間片的不可剝奪的實時內核,如圖2所示。


    此內核主要是利用微控制器內部的時間模塊產生恒定的實時中斷,將CPU的運行時間分成一個個時間片。內核的任務調度工作都是在時間片的開始階段完成的,而每個任務都必須在單個時間片內完成。

    在這個內核中,每0.5ms發生1次時鐘中斷,而每10次時鐘中斷組成了1個時間片(5ms)。任務1的優 先級最高,每2個時間片(10ms)會執行1次,任務2每4個時間片(20ms)執行1次,優先級最低的任務6則每64個時間片(320ms)會執行1次。

    4.2 系統中的鍵盤任務問題

    在單片機系統中,鍵盤主要用于輸入數據、代碼和命令,因此系統必須循環不停地掃描掃描;一是有鍵波按下,CPU立即做出響應。鍵盤任務子程序也是根據這個要求而設計的。一般有兩種處理方式:一是中斷方式,二是查詢方式。從有鍵按下時開始,到按鍵釋放并轉相應子程序而終止。該任務被內核調度的情況如圖3所示。
    linux操作系統文章專題:linux操作系統詳解(linux不再難懂)


    評論


    相關推薦

    技術專區

    關閉
    主站蜘蛛池模板: 陆河县| 彰武县| 惠来县| 长沙市| 日土县| 河南省| 射洪县| 敖汉旗| 寻乌县| 山丹县| 芜湖县| 汝阳县| 依兰县| 无为县| 响水县| 镇原县| 九寨沟县| 板桥市| 镇平县| 哈巴河县| 通榆县| 徐水县| 锦州市| 浦北县| 枣阳市| 崇文区| 宜兰市| 乐平市| 阜新| 舟曲县| 贺州市| 甘南县| 墨脱县| 淮安市| 汉源县| 江山市| 浪卡子县| 定州市| 邵阳县| 阆中市| 清苑县|