UCOS II 中信号量的使用
   
    
    
    1、声明信号量
   
    例如:
    
     OS_EVENT * Fun_semp; //声明信号量
    
    
    
    2、创建信号量
   
    在使用信号量之前,应用程序必须创建一个信号量,创建信号量使用函数
    
    函数原型:
    
     OS_EVENT * OSSemCreate( INT16U cnt //信号量计数器初值 );
    
    
    其中函数的参数 cnt 代表信号量的计数值。当任务需要访问一个共享资源时, 先要请求管理该资源的信号量, 这样就可以根据信号当前是否有效( 即信号茧的计数器OSEventCnt 的值是否大于0) 来决定该任务是否可以继续运行。该值就好比上厕所时的剩余坑位,只有剩余坑位大于0,即有坑位了,才能继续,否则只能等待或返回。
   
    例如:
    
     Fun_Semp = OSSemCreate(1); //创建信号量
    
    
    
    3、请求信号量
   
函数原型:
void OSSemPend(OS_EVENT * pevent,		//信号量的指针
			   INT16U timeout,			//timeout为等待时限
			   INT8U * err);			//错误信息
    
     注意:若timeout为0,则代表任务的等待时间为无限长
    
    
    如果不希望任务等待则调用以下函数
   
INT16U OSSemAccept(OS_EVENT * pevent);
    
    
    4、发送信号量
   
INT8U OSSemPost(OS_EVENT * pevent);
    
    
    5、删除信号量
   
如果应用程序不需要某个信号量,那么可调用函数OSSemDel() 来删除该信号量。该函数的原型如下
OS_EVENT * OSSemDel(
					OS_EVENT * pevent,		//信号量的指针
					INT8U opt,				//删除条件选项
					INT8U * err     		//错误信息
					);
其中的参数 opt 用来指明信号量的删除条件。
- 
     
 opt = OS_DEL_NO_PEND; //当等待任务表中没有等待任务时才删除
 
- 
     
 opt = OS_DEL_ALLWAYS; //无论等待任务表中有没有等待任务都删除
 
 
版权声明:本文为qq_39294918原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
