新聞中心

        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;
          }
        }


        關鍵詞: 多任務 資源復用

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 文山县| 鄂伦春自治旗| 新巴尔虎左旗| 邵阳市| 屯门区| 天祝| 肃北| 都江堰市| 富平县| 荃湾区| 黔西县| 肇东市| 尖扎县| 盐边县| 恭城| 淮滨县| 琼中| 肇东市| 营山县| 左权县| 商城县| 水富县| 永登县| 肇东市| 长汀县| 永善县| 临西县| 建德市| 泰宁县| 宝丰县| 浠水县| 沅江市| 固始县| 洪泽县| 岳西县| 洛浦县| 那坡县| 永春县| 汾阳市| 龙陵县| 开原市|