新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 嵌入式智能儀表自動控制技術

        嵌入式智能儀表自動控制技術

        作者: 時間:2012-08-16 來源:網絡 收藏

        任務的調度算法如下:

        void os_schedule_task(void){

        int i ;

        pCur_task=pHi_task;

        for(i=O;i%26lt;TASKNUMos_tcb[i].state!=1;i++){

        Hi_task=i;

        if(pHi_task!=%26amp;os_tcb[i]){

        pHi_task=%26amp;os_tcb[i];

        os_sw_task();

        }

        }

        任務級切換函數需要改變程序計數器(PC),所以必須通過軟中斷實現。在軟中斷服務函數中改變當前運行任務的TCB指針到最高優先級就緒任務,執行中斷返回指令在新的任務堆棧中彈出最高優先級任務的PSW和PC指針,從而完成任務切換。

        ③ 任務狀態轉換主要是激活任務os_TasK_AcTIve()、掛起任務os_TasK_Suspend()和延遲任務os_TasK_Delay()。掛起任務使任務進入掛起狀態,延遲任務使任務進入等待狀態,而激活任務函數可以使任務從掛起狀態或者等待狀態直接進入就緒狀態。任務的狀態由任務控制塊中的任務狀態字(os_tcb.state)給出。當os_tcb.state=1時表示任務進入就緒狀態;當os_tcb.state=O時表示任務處于掛起狀態;當os_tcb.state%26gt;1時表示任務等待os_tcb.state-1個系統時鐘間隔之后進入就緒狀態。任務狀態切換示意圖如圖2所示。

        ④由于這些中低端的儀器每個任務的執行時間都比較短,為了避免優先級反轉和死鎖,采用非搶占式調度方式,進入就緒態的任務必須在當前任務執行完成后才能被調度。調度時處于就緒表中優先級最高的任務進入運行。

        3.2.3 調度算法的時鐘驅動

        時間驅動需要硬件提供時鐘節拍來實現任務的定時。時鐘節拍信號源可以是專門的硬件定時器,比如AT89C52中的Timer2。也可以使用其他更精確的方式提供系統時鐘節拍。在這里使用MC9S12DP256B捕獲器的第7個通道來實現,時鐘中斷處理函數如下:

        的捕獲器中有一個自動增長主時鐘,每一個硬件周期驅動TCNT+1,并與TC7相比較。設置TC7=TCNT+OS_TICK_OC_CNTS(在系統配置文件中定義),當度過OS_TICK_OC_CNTS個硬件周期時,TCNT=TC7則產生中斷。在中斷中調用系統時鐘節拍函數提供精確的系統時鐘節拍,并再次初始化TC7=TCNT+OS_TICK_OC_CNTS,產生下一個時鐘節拍。

        系統時鐘節拍函數自動檢查每個被延遲的任務,當任務的延遲周期結束后,自動將任務切換到就緒狀態。具體算法如下:

        ① 從任務控制塊列表頭部開始順序檢查各任務狀態字,將所有延遲任務的任務狀態字減1。

        ② 當前延遲任務的狀態字變為1時,該任務延時結束,置就緒任務列表改變標志位。

        ③ 恢復被中斷任務狀態,返回中斷。

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

        上一頁 1 2 下一頁

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 汉中市| 芷江| 达尔| 三都| 巴彦淖尔市| 鹿泉市| 德保县| 张家界市| 临猗县| 郴州市| 井陉县| 太仆寺旗| 吴川市| 榕江县| 花莲县| 武平县| 邹城市| 定结县| 阜新市| 奈曼旗| 乌拉特后旗| 内江市| 沅陵县| 启东市| 昭苏县| 潼南县| 安丘市| 南投市| 虞城县| 内丘县| 澄迈县| 城市| 安乡县| 高台县| 大连市| 洪湖市| 新兴县| 尼玛县| 且末县| 清河县| 兴和县|