uCOSii-信号量

概念理解:

        信号量就是一个量,设为N。当N=0的时候,代表本任务(资源)不可用,处于等待状态,当调用函数OSSemPost(Sem_Event);发送一次信号量,此时N=1,本任务可执行,执行完毕后N=N-1。等下新的信号量到达。有点类似标志位。

 

新建信号量:

OS_EVENT * Sem_Event;
OS_SEM_DATA result[];
u8 err;

打下划线为用到的变量,事先声明。

 

1、Sem_Event=OSSemCreate(4);  //创建信号量并初始化为4.

 

2、OSSemPend(Sem_Event,0,&err); //请求信号量,若信号量有效(cnt>0),那么任务继续运行,否则进入等待状态

实际上,函数就是判断N是非为0,为0任务等待。>0继续运行,并且N-1。

 

3、OSSemPost(Sem_Event); //发送一次信号量,即N+1;

 

4、 OSSemDel(Sem_Event,OS_DEL_ALWAYS,&err);

      //删除信号量Sem_Event之后,信号量讲无效,所有任务将不受限信号量,注意下划线的变量

 

5、OSSemQuery(Sem_Event,result);   //查询信号量Sem_Event的状态
      count=result->OSCnt;                     //获取信号量Sem_Event的计数值=count

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值