新聞中心

        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 下一頁

        關鍵詞: 多任務 資源復用

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 泉州市| 庆云县| 承德市| 腾冲县| 曲沃县| 温泉县| 贡觉县| 镇雄县| 偏关县| 荥阳市| 彩票| 巢湖市| 威海市| 通城县| 香河县| 平定县| 南城县| 隆回县| 民县| 宁波市| 新巴尔虎左旗| 鲜城| 海原县| 南漳县| 太仓市| 库车县| 京山县| 昔阳县| 雷州市| 托里县| 揭东县| 太谷县| 赤水市| 夏河县| 巫山县| 呼图壁县| 安丘市| 项城市| 临高县| 达日县| 涿鹿县|