程序的多任务和资源复用举例

时间: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

关键词: 多任务 资源复用

加入微信
获取电子行业最新资讯
搜索微信公众号:EEPW

或用微信扫描左侧二维码

相关文章

查看电脑版