<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 混合式調度器C51源代碼及相關注釋

          混合式調度器C51源代碼及相關注釋

          作者: 時間:2012-05-12 來源:網(wǎng)絡 收藏

          uchar SCH_Add_Task(void (code * pFunction)(),const ushort DELAY, ushort PERIOD,bit Co_op)
          {
          uchar Index = 0;
          //首先在隊列中找到一個空隙(如果有的話,否則就不添加新任務)
          while((SCH_tasks_G[Index].pTask != 0)(Index SCH_MAX_TASKS))
          {
          Index++;//當一個新任務被添加,且沒有超過任務上限
          }
          //是否達到任務隊列的結尾?
          if(Index == SCH_MAX_TASKS)//任務數(shù)量達到上限
          {
          Error_code_G = ERROR_SCH_TOO_MANY_TASKS;
          return SCH_MAX_TASKS;//直接返回,不添加這個新任務
          }
          //如果能運行到這里,說明任務隊列中有空隙,添加任務。
          SCH_tasks_G[Index].pTask = pFunction;
          SCH_tasks_G[Index].Delay = DELAY;
          SCH_tasks_G[Index].Period = PERIOD;
          SCH_tasks_G[Index].Co_op = Co_op;
          SCH_tasks_G[Index].RunMe = 0;
          return Index;//返回任務的位置(以便以后刪除)
          }

          本文引用地址:http://www.ex-cimer.com/article/149077.htm

          void SCH_Dispatch_Tasks(void)
          {
          uchar Index;
          //(運行)下一個任務(如果有任務就緒)
          for(Index = 0;Index SCH_MAX_TASKS;Index++)
          {
          //只合作式任務
          if((SCH_tasks_G[Index].RunMe > 0)(SCH_tasks_G[Index].Co_op))
          {
          (*SCH_tasks_G[Index].pTask)();//執(zhí)行任務
          SCH_tasks_G[Index].RunMe -= 1;//清除任務需要執(zhí)行的標志
          }
          //如果這是個“單次”任務,將它從隊列中刪除
          if(SCH_tasks_G[Index].Period == 0)
          {
          SCH_tasks_G[Index].pTask = 0;// 比通過調用來刪除任務更快SCH_Delete_Task(Index);
          }
          }
          SCH_Report_Status();//報告系統(tǒng)狀況
          SCH_Go_To_Sleep();
          }

          void SCH_Start(void)
          {
          EA = 1;
          }

          bit SCH_Delete_Task(const ushort TASK_INDEX)
          {
          bit Return_code;
          if(SCH_tasks_G[TASK_INDEX].pTask == 0)
          {
          //這里沒有任務。。。設置全局錯誤變量
          Error_code_G = ERROR_SCH_CANOT_DELETE_TASK;
          Return_code = RETURN_ERROR;//返回錯誤代碼
          }
          else
          {
          Return_code = RETURN_NORMAL;
          }
          //刪除任務
          SCH_tasks_G[TASK_INDEX].pTask = 0x0000;
          SCH_tasks_G[TASK_INDEX].Delay = 0;
          SCH_tasks_G[TASK_INDEX].Period = 0;
          SCH_tasks_G[TASK_INDEX].RunMe = 0;
          return Return_code;
          }

          void SCH_Go_To_Sleep()
          {
          PCON |= 0x01;//進入休眠模式
          }

          void SCH_Report_Status(void)
          {
          /* #ifdef SCH_REPORT_ERRORS
          if(Error_code_G != Last_error_code_G)
          {
          Error_Port = 255 - Error_code_G;
          Last_error_code_G = Error_code_G;
          if(Error_code_G != 0)
          {
          Error_tick_count_G = 60000;
          }
          else
          {
          Error_tick_count_G = 0;
          }
          }
          else
          {
          if(Error_tick_count_G != 0)
          {
          if(--Error_count_G == 0)
          {
          Error_code_G = 0;
          }
          }
          }
          #endif */
          }

          void LED_Flash_Update_A(void)
          {
          if(LED_State_G_A == 1)
          {
          LED_State_G_A = 0;
          LED_pin_A = 0;
          }
          else
          {
          LED_State_G_A = 1;
          LED_pin_A = 1;
          }
          }

          void LED_Flash_Update_B(void)
          {
          if(LED_State_G_B == 1)
          {
          LED_State_G_B = 0;
          LED_pin_B = 0;
          }
          else



          評論


          相關推薦

          技術專區(qū)

          關閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();