【小黑嵌入式系统第十五课】μC OS-III程序设计基础(四)——消息队列(工作方式&数据通信&生产者消费者模型)

本文详细介绍了μC OS-III操作系统中消息队列的工作方式,包括一对一、多对一、一对多模式。讨论了消息队列的状态、数据通信以及在任务间同步的角色。通过实例展示了如何利用消息队列实现多任务接收数据、生产者消费者模型,同时提到了动态内存管理和定时器管理在嵌入式系统中的应用。
摘要由CSDN通过智能技术生成

当任务往消息队列中发送消息时,可选择只将该消息发送给一个任务。当前等待消息的任务中只有最高优先级的那个将接收到消息,或最先进入等待消息列表的(同优先级)任务。

在这里插入图片描述

注:也可选择以广播的形式发送消息,那么所有“等待此消息的”任务都将获得该消息。


如果没有任务在等待消息队列的消息,则发送消息时会判断消息队列当前是否已满 。

在这里插入图片描述


1.1.2 从消息队列接收消息

消息队列中已存在消息,通过内核服务将消息传递给等待消息的任务中优先级最高的任务,或最先进入等待消息任务列表的(同优先级)任务。

在这里插入图片描述


如果消息队列为空,则等待消息的任务被放入等待消息的任务列表中,直到有其它任务向消息队列发送消息后,该任务才能结束等待状态或在等待超时的情况下运行。

在这里插入图片描述


OSQPend()函数允许用户定义一个最长的等待时间Timeout作为它的参数,这样可以避免该任务无休止地等待下去。

在这里插入图片描述


内核提供以下消息队列服务:

在这里插入图片描述

  • 等待消息的到来(PEND);
  • 将消息放入队列中去(POST);
  • 清空消息队列
  • 消息队列初始化,队列初始化时总是清为空;

与信号量相比,消息队列不仅可以实现同步,而且通过缓冲的方式来传递多个数据信息,从而避免了信息的丢失或混乱。


1.2 消息队列的状态

消息队列有3种状态,即空状态(消息队列中没有任何消息)、满状态(消息队列中的每个存储单元都存放了消息)、正常状态(消息队列中消息但又没有到满的状态)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值