UCOS学习日(5)任务间的通讯,事件控制块,信号量的详细操作

任务间的通信

任务之间的协调运行非常有必要,否则系统将会出现非常严重的问题。
UCOS提供一个事件控制块来控制任务之间的通讯
在这里插入图片描述事件的类型
信号量
互斥信号量
消息队列
消息邮箱
信号量计数器
统计信号量的数
消息邮箱或消息队列的指针

等待事件的任务组和任务等待表
类似于任务就绪表一样的结构
在这里插入图片描述
任务对应位为1就表示任务为该事件的等待任务。

而系统初始化时,也会根据最大任务OS_MAX_EVENTS来创建多少个事件控制块
创建一个事件的时候就会从空的事件控制块列表中取出一个,删除一个事件就会归还给事件控制列表
在这里插入图片描述

信号量

信号量有普通的信号量 还有一种互斥信号量

任务获得信号量就-- 任务释放信号量就++
对应的等待任务看见没有信号量就不会执行相应的操作。
这样就不会对一些共享资源造成冲突,例如公共电话亭,有三个电话,同时就只能三个人打电话,第四个人只能等待。

互斥信号量的话就是二值信号量,就是公共电话亭就只有一个电话

消息邮箱

在这里插入图片描述

消息队列

消息队列简单来说是消息邮箱的升级版
在这里插入图片描述

信号量及其操作

创建信号量

在这里插入图片描述
返回一个事件控制块指针,创建信号量之前要定义一个事件控制块指针来接收这个函数的返回值

请求信号量

在这里插入图片描述
等待时限为0则无限等待,err是这个函数的执行结果

如果需要一个任务在发现信号量没有时不进入等待状态继续运行就调用函数
在这里插入图片描述

发送信号量

在这里插入图片描述
发送信号量,如果没有等待任务就信号量++,如果有等待任务那么直接就绪从而引发一次任务调度

删除信号量

在这里插入图片描述
删除任务条件可以是
OS_DEL_NO_PEND
没有等待任务再删除
也可以是
OS_DEL_ALLWAYS
无论有没有等待任务都直接删除信号量

查询信号量状态

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值