当前位置:   article > 正文

[uC/OS-III] 20. 消息队列_uscosii同一接收任务能创建2个队列吗?

uscosii同一接收任务能创建2个队列吗?

1. 消息队列的基本概念

队列又称消息队列,是一种常用于任务间通信的数据结构, 队列可以在任务与任务间、中断和任务间传递信息,实现了任务接收来自其他任务或中断的不固定长度的消息,任务能够从队列里面读取消息,当队列中的消息是空时,读取消息的任务将被阻塞,用户还可以指定阻塞的任务时间timeout,在这段时间中,如果队列为空,该任务将保持阻塞状态以等待队列数据有效。

通过消息队列服务,任务或中断服务程序可以将消息放入消息队列中。同样,一个或多个任务可以从消息队列中获得消息。当有多个消息发送到消息队列时,通常是将先进入消息队列的消息先传给任务,也就是说,任务先得到的是最先进入消息队列的消息,即先进先出原则(FIFO),但是 uCOS 也支持后进先出原则(LIFO)。

2. 消息队列工作过程

在 μCOS-III 中定义了一个数组 OSCfg_MsgPool[OS_CFG_MSG_POOL_SIZE],因为在使用消息队列的时候存取消息比较频繁, 在系统初始化的时候就将这个大数组的各个元素串成单向链表,组成我们说的消息池,而这些元素我们称之为消息。

3.消息队列的阻塞机制

我们使用的消息队列一般不是属于某个任务的队列,在很多时候,我们创建的队列,是每个任务都可以去对他进行读写操作的,但是为了保护每个任务对它进行读操作的过程( uCOS 队列的写操作是没有阻塞的), 我们必须要有阻塞机制,在某个任务对它读操作的时候,必须保证该任务能正常完成读操作,而不受后来的任务干扰,凡事都有先来后到嘛!

4. 消息队列的应用场景

消息队列可以应用于发送不定长消息的场合,包括任务与任务间的消息交换,队列是uCOS 中任务与任务间、中断与任务间主要的通讯方式。

5. 消息队列的结构
uCOS 的消息队列由多个元素组成, 在信号量被创建时,需要由我们自己定义消息队列(也可以称之为消息队列句柄),因为它是用于保存消息队列的一些信息的, 其数据结构 OS_Q 除了队列必须的一些基本信息外,还有 PendList 链表与 MsgQ,为的是方便系统来管理消息队列。

6.消息队列常用函数

创建消息队列函数OSQCreate() 

消息队列删除函数 OSQDel()  

消息队列发送函数 OSQPost()

消息队列获取函数 OSQPend()

7.实验

消息队列实验是在 uCOS 中创建了两个任务 AppTaskPost()和 AppTaskPend(), AppTaskPost() 用于发送消息, 任务 AppTaskPend()用于接收消息, 两个任务独立运行, 并把接收到的消息通过串口调试助手打印出来。

 


 


 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/blog/article/detail/50535
推荐阅读
相关标签
  

闽ICP备14008679号