新聞中心

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

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

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


        /*---------------------------------------------------------------------------*/
        /*按鍵掃描,包含兩個掃描任務*/
        /**********************************************
        每次系統時間進入一次,20ms.這里把20MS判斷放進來,好看點
        按鍵掃描循環
        為簡單化,沒使用隊列保存鍵值,使用標志
        那些重復發出N鍵,在這個結構中非常容易加上
        **********************************************/
        void Key_MainLoop()
        {
          if(fSYS_20ms==0)return;

          switch(mKey1SwapTask){
           case 0:/***有按鍵按下嗎?***/
              if(iKey1==0){
               mKey1SwapTask=1;
              }
              break;
          case 1: /***鍵按下去抖延時***/
              mKey1SwapTask=2;          /***延時一個系統時間***/
              break;
          case 2: /***鍵值判斷***/
              if(iKey1==0){
               fKey1=1;             /*按鍵有效*/
               mKey1SwapTask=3;         /*去按鍵去抖*/
              }
              else mKey1SwapTask=0;        /*抖動*/
              break;
          case 3: /***有松開嗎?***/
              if(iKey1==1){
               mKey1SwapTask=4;
              }
              break;
          case 4: /***鍵松開去抖延時***/
              mKey1SwapTask=5;          /***延時一個系統時間***/
              break;
          case 5: /***鍵值判斷***/
              if(iKey1==1){
               mKey1SwapTask=0;         /*去按鍵檢測開始*/
              }
              else mKey1SwapTask=3;        /*抖動*/
              break;
          }


          switch(mKey2SwapTask){
           case 0:/***有按鍵按下嗎?***/
              if(iKey2==0){
               mKey2SwapTask=1;
              }
              break;
          case 1: /***鍵按下去抖延時***/
              mKey2SwapTask=2;          /***延時一個系統時間***/
              break;
          case 2: /***鍵值判斷***/
              if(iKey2==0){
               fKey2=1;             /*按鍵有效*/
               mKey2SwapTask=3;         /*去按鍵去抖*/
              }
              else mKey2SwapTask=0;        /*抖動*/
              break;
          case 3: /***有松開嗎?***/
              if(iKey2==1){
               mKey2SwapTask=4;
              }
              break;
          case 4: /***鍵松開去抖延時***/
              mKey2SwapTask=5;          /***延時一個系統時間***/
              break;
          case 5: /***鍵值判斷***/
              if(iKey2==1){
               mKey2SwapTask=0;         /*去按鍵檢測開始*/
              }
              else mKey2SwapTask=3;        /*抖動*/
              break;
          }
        }


        關鍵詞: 多任務 資源復用

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 广灵县| 阿克陶县| 长兴县| 青铜峡市| 南靖县| 肇庆市| 襄垣县| 长泰县| 龙南县| 莱芜市| 汝阳县| 民丰县| 府谷县| 临高县| 蒙山县| 扶绥县| 恩施市| 铁岭市| 锦州市| 景东| 永善县| 西峡县| 四子王旗| 中卫市| 梨树县| 望谟县| 长兴县| 元阳县| 五寨县| 茶陵县| 革吉县| 河西区| 木兰县| 鹤壁市| 岳阳县| 巫溪县| 奉节县| 普宁市| 襄城县| 栾川县| 武宁县|