21 UCOS-III 信号量

信号量释放OSSemPost()

...1.满足信号量释放条件调用OS_SemPost()进行释放

......1.1从信号量等待列表中判断是否有任务等待信号量

.........1.1.1无,信号量是否溢出(根据计数的的数据类型判断)。

............1.1.1.1溢出,返回报错

............1.1.1.2可用信号量计数++

.........1.1.2有,根据是释放给所有任务还是最高优先级任务调用OS_Post()将信号发布给任务。

......1.2根据参数是否进行调度

 

信号量获取函数 OSSemPend()

信号量为0则会将任务堵塞或返回报错重新获取。多个任务获取同一个信号量,释放给所有任务则所有的任务都会获取,否则优先级最高的任务获得

....满足信号量释获取件调用OSSemPend()进行获取

......1.有可用信号量,将可用信号量计数--

......2.无可用信号量

.........2.1不堵塞任务,返回报错

.........2.2 堵塞调用 OS_Pend()函数将当前任务脱离就绪列表,并根据用户指定的阻塞时间插入到节拍列表和队列等待列表

......3.调度,用野火的代码,按按键会会释放信号量,等待信号量的任务由等待堵塞状态转到运行,4设个断点可知。然后由于没有可用信号量进入等待堵塞,3切换任务。

......4.根据任务状态判断是否等待到信号量,获取到消息则将消息传递给任务,否则返回未获取成功的原因。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值