新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 程序的多任務和資源復用舉例

        程序的多任務和資源復用舉例

        作者: 時間:2012-07-04 來源:網絡 收藏


        /*---------------------------------------------------------------------------*/
        /*任務一*/
        /**********************************************
        一個部分輸出1HZ的方波,2S后停止。
        **********************************************/
        void Task1_MainLoop()
        {
          switch(mTask1Id){
           case 0:  if(fKey1){
                   fKey1=0;          /*接收該鍵值*/
                   mTask1_1HzReg=500/2;    /*1hz時間寄存器,500ms,以2MS為單位*/
                   mTask1_2SReg=2000/2;    /*2S時間寄存器,500ms,以2MS為單位*/
                   oTask1=0;
                   mTask1Id=1;
                }
                break;
           case 1:  if(fSYS_2ms){
                  mTask1_1HzReg--;
                  if(mTask1_1HzReg==0){
                    oTask1=~oTask1;
                    mTask1_1HzReg=500/2;   /*1hz時間寄存器,500ms,以2MS為單位*/
                  }

                  mTask1_2SReg--;
                  if(mTask1_2SReg==0){
                    oTask1=1;        /*2S時間到*/
                    mTask1Id=0;
                  }
                }
                break;
          }
        }


        /*---------------------------------------------------------------------------*/
        /*任務二*/
        /**********************************************
        一個一直輸出1.2hz的方波,直到按鍵再次按
        **********************************************/
        void Task2_MainLoop()
        {
          switch(mTask2Id){
           case 0:  if(fKey2){
                   fKey2=0;          /*接收該鍵值*/
                   mTask2_1p2HzReg=416/2;   /*1hz時間寄存器,832/2ms,以2MS為單位*/
                   oTask2=0;
                   mTask2Id=1;
                }
                break;
           case 1:  if(fKey2){
                 fKey2=0;
                 oTask2=1;
                 mTask2Id=0;
                }
                else {
                  if(fSYS_2ms){
                    mTask2_1p2HzReg--;
                    if(mTask2_1p2HzReg==0){
                      oTask2=~oTask1;
                      mTask2_1p2HzReg=416/2;  /*1hz時間寄存器,832/2ms,以2MS為單位*/
                    }
                  }
                }
                break;
          }
        }

        /*---------------------------------------------------------------------------*/
        /*主程序*/
        void main(){
          Timer0_Init();
          EA=1;

          while(1){
            Timer0_MainLoop();
            Key_MainLoop();
            Task1_MainLoop();
            Task2_MainLoop();
          }
        }


        上一頁 1 2 3 下一頁

        關鍵詞: 多任務 資源復用

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 汶川县| 尚义县| 高要市| 尉犁县| 凤城市| 大渡口区| 商城县| 遂平县| 乐昌市| 民县| 措美县| 临桂县| 海林市| 汤原县| 商都县| 合作市| 堆龙德庆县| 夏河县| 长岭县| 文山县| 唐河县| 朝阳县| 鄢陵县| 阿荣旗| 汨罗市| 昂仁县| 榆树市| 慈溪市| 喀喇| 偏关县| 井研县| 平昌县| 报价| 阳原县| 武安市| 靖州| 龙陵县| 安乡县| 上饶县| 明光市| 娱乐|