新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 單片機編程心得

        單片機編程心得

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

        7.多任務程序,這個概念在前面也有提到,就是充分地利用CPU來實現多任務的前后臺操作,相當于自己用程序構造一個基于前后臺的多任務操作系統,換句話說就是通過定時器中斷合理地分配CPU資源來響應不同的任務。多個任務需要CPU關照的頻度不一樣,我們選擇最快的那個頻度來作為定時器的節拍(通常為最小公倍數,這樣方便定時器分配),然后通過定時器分頻,即滿足各個任務的響應節拍。比如任務A頻度為50HZ,任務B為40HZ,這樣我們就可以去定時器中斷節拍為200HZ,每個任務設定一個節拍控制計數器C,當C計數4次時,任務切換到A,計數到5次切換B……

        void Timer0(void) interrupt 1

        {

        //賦初值,定義變量

        for(i=0; i

        {

        if(task_delay[i]) task_delay[i]--;

        }

        void (*run_task[MAX_TASK])(); //定義一個函數指針數組

        void main()

        {

        //***其余部分省略

        while(1)

        {

        if(task_delay[0] == 0) {(*run_task[0])();task_delay[0] = C;/*任務0計數初值*/}

        //類似任務調度部分省略

        }

        }

        同時我們也很清楚的知道,有些任務需要很長的時間,如DS18B20溫度傳感器完成一次溫度轉換需要很長的時間(相對于的us級來說),這樣我們就可以將器件驅動任務在劃分為:初始段,啟動段,獲取結果段,等子任務段,可分別設定標志位(switch+case語句),在需要等待較長時間的地方,允許CPU去執行其余任務,另外可在主程序任務輪訓中添加break來實現任務的優先級劃分。


        上一頁 1 2 下一頁

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 固镇县| 将乐县| 资溪县| 义马市| 温泉县| 若尔盖县| 舒城县| 峨眉山市| 武威市| 德惠市| 阜宁县| 方山县| 宁陵县| 邵东县| 渑池县| 岳西县| 乌拉特后旗| 泸溪县| 邹城市| 白城市| 固安县| 恩施市| 榆社县| 信宜市| 洮南市| 永善县| 金湖县| 江达县| 德惠市| 博兴县| 日喀则市| 远安县| 呈贡县| 斗六市| 曲沃县| 抚远县| 宜兴市| 巴彦淖尔市| 罗山县| 嘉鱼县| 泗水县|