???????????????????????????????м???д??????????????????????????????????????????????????????飬????????????鷳?????????????У????????????????????????????д????????????Щ???????????????????У???????????????????????????????????????

??????1??RT-THREAD

??????2??RAW-OS

??????3??ClearRTOS

?????????б???????£?????????????????λ??????????????rt-thread???????????????????bsp??cpu??fs??lwip??gui?????????????????????????????????????????????????raw-os???????????????????????????????????????汾??????????????????????????????????????????????????????????????????????????????????download???????ú????????е??????????в?????????????????????????????д???????????????????????????????os??????????????????????????????????????楨????????????????????????????

?????????????????????????????????????????????????????????????????????Щ????????????????????????????????????????????????·??????????????rt-thread??raw-os??????????????????raw-os?????Щ???????????????raw-os???????vc???棬??????????????????????ù??????????????????????????????????????????????raw-os??汾??????update??У????????????????????е?????????Щ?????????????????????????????????????????????????????????????

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

typedef struct RAW_SEMAPHORE
{
 RAW_COMMON_BLOCK_OBJECT       common_block_obj;
 RAW_U32                       count;
 
} RAW_SEMAPHORE;

??????Щ???????raw-os??????????????????汾??0.94?汾?????μ?0.96?汾?е???????????????????????????????????????????????????comm_block_obj?????????????????????????????????????????У???count????????ж???????????????

????????????????????????????????????????????????????????????????????????????????????????????????? WAKE_ONE_SEM??WAKE_ALL_SEM????????????????????????????????????????????????????????????е??????????????????????棬???????????????????????

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

RAW_U16 raw_semaphore_create(RAW_SEMAPHORE *semaphore_ptr?? RAW_U8 *name_ptr?? RAW_U32 initial_count)
{
 #if (RAW_SEMA_FUNCTION_CHECK > 0)
 
 if (semaphore_ptr == 0) {
  
  return RAW_NULL_OBJECT;
 }

 if (initial_count == 0xffffffff) {

  return RAW_SEMOPHORE_OVERFLOW;

 }
 
 #endif

 /*Init the list*/
 list_init(&semaphore_ptr->common_block_obj.block_list);
 
 /*Init resource*/
 semaphore_ptr->count     = initial_count;                                
 
 semaphore_ptr->common_block_obj.name = name_ptr; 
 
 semaphore_ptr->common_block_obj.block_way = 0;
 
 return RAW_SUCCESS;

}

???????????????????????????????????????????????????????У?

??????1???ж??????????

??????2??????????????С???????

??????3???????????????????