UCOS II 中信号量的使用

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; //无论等待任务表中有没有等待任务都删除
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值