《建立一个属于自己的AVR的RTOS》笔记——OSTaskSemPost

来源:互联网 发布:linux下的system命令 编辑:程序博客网 时间:2024/06/04 17:53

第五篇:完善的协作式的内核——OSTaskSemPost

 

//发送一个信号量,可以从任务或中断发送  void OSSemPost(unsigned char Index)  {     if(Sem[Index].OSEventType)                //当要求的信号量是共享型    {      Sem[Index].OSEventState=0x01;           //使信号量有效      OSRdyTbl |=Sem [Index].OSTaskPendTbl;   //使在等待该信号的所有任务就绪      Sem[Index].OSTaskPendTbl=0;             //清空所有等待该信号的等待任务    }      else                                       //当要求的信号量为独占型    {            unsigned char i;      for (i = 0; i < OS_TASKS && !(Sem[Index].OSTaskPendTbl & (0x01<<i));  i++);      if(i < OS_TASKS)                       //如果有任务需要      {        Sem[Index].OSTaskPendTbl &= ~(0x01<<i); //从等待表中去除        OSRdyTbl |= 0x01<<i;                     //任务就绪      }      else      {        Sem[Index].OSEventState =1;        //使信号量有效      }    }  }   //从任务发送一个信号量,并进行调度  void OSTaskSemPost(unsigned char Index)   {    OSSemPost(Index);    OSSched();     }  


 

0 0
原创粉丝点击