???????????????????????????

???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????С????????????????????????????????????????????????????????????????????λ???????????λ?????????????????????????λ?????????????????????????λ??????????????????????????????????????????????????????????????????????????????????????????0?????????????????????????????л???????????

/*?????????б?*/
OS_SEM Sem[MAX_SEM_NUM];   
/*
 * ?????????
*/
OS_SEM* OSSemCreate(int32 conuter)
{
     OS_CPU_SR  cpu_sr = 0;
     uint32  index;
    if (conuter < 0)
    {
       return (OS_SEM*)NULL;
    }
 
     OS_ENTER_CRITICAL();
    for(index=0;index<MAX_SEM_NUM;index++)
    {
      if(Sem[index]==-1)
      {
         Sem[index]=conuter;
         OS_EXIT_CRITICAL();
         return(Sem[index]);
      }
    }
 
   OS_EXIT_CRITICAL();
   return (OS_SEM*)NULL;
}
int8 OSSemDelete(OS_SEM* pSem)
{
 OS_CPU_SR  cpu_sr = 0;
 OS_ENTER_CRITICAL();
 /*?????????????????0??????????????????*/
 if ((*pSem) != 0)
 {
  OS_EXIT_CRITICAL();
  return OS_Err;
 }
 else
 {
  (*pSem) = (OS_SEM)-1;
  OS_EXIT_CRITICAL();
  return OS_OK;
 }
}
/*?????????????????????*/
/*?????????*/
/*?????????????*/
int8 OSSemPend(OS_SEM* pSem??uint32 timeout)
{
 uint32  index;
 OS_CPU_SR  cpu_sr = 0;
 for (index = 0;index < timeout;index++)
 {
  OS_ENTER_CRITICAL();
  if ((*pSem) > 0)
  {
   (*pSem)--;
   OS_EXIT_CRITICAL();
   return OS_OK;/*????????????*/
  }
  else
  {
   /*??????????*/
   OS_EXIT_CRITICAL();
   OSTimeDly(1);
  }
 }
 
 return OS_Err;
}
/*????????????????????????????*/
int8 OSSemGet(OS_SEM* pSem)
{
 OS_CPU_SR  cpu_sr = 0;
 OS_ENTER_CRITICAL();
 if ((*pSem) > 0)
 {
  (*pSem)--;
  OS_EXIT_CRITICAL();
  return OS_OK;/*????????????*/
 }
 OS_EXIT_CRITICAL();
 return OS_Err;
}
/*?????????????????*/
int8 OSSemPost(OS_SEM* pSem)
{
 OS_CPU_SR  cpu_sr = 0;
 OS_ENTER_CRITICAL();
 (*pSem)++;
 OS_EXIT_CRITICAL();
 return OS_OK;
}
?????????????????????????????????????????????????????????

???????????printf???????????????????????????????????????????????á?????????????????????????????????????????????????????????á?

OS_SEM*   testSem;
void  task6(void * arg)
{
    testSem=OSSemCreate(1); //????????????
    while(1 )
    {
         OSSemPend(testSem?? 0);
         printf("task 6  Running! 27 ");
         OSSemPost(testSem);
         OSTimeDly(100);/*100????10??*/
    }
}