当前位置: 首页 > news >正文

RTOS之队列

        在RTOS官方文档中,对队列的定义讲述的很清晰,队列是任务间通信的主要方式,它们可以用于在任务之间 以及中断和任务之间发送消息。在大多数情况下,队列用作线程安全的 FIFO(先进先出)缓冲区, 新数据被发送到队列的后面,但也可以发送到前面。

任务A通过队列将数据发送给任务B,这里很容易理解,因为之前学习过数据结构的小伙伴应该都知道这个道理,官方文档当中也详细介绍了队列在RTOS当中的使用

FreeRTOS 队列 - FreeRTOS™ 

 那么我这里来总结一下队列为什么简单便捷

1.将消息定义保存为指针,并复制消息的一个指针至队列。即将想要发送的消息地址作为队列函数的参数

2.单个队列可用于接收不同的消息类型, 以及来自多个地点的消息, 方法是将队列定义为保存一个结构体,该结构的一个成员持有消息类型, 另一个成员保存消息数据(或消息数据的一个指针)。

3.被限制在受保护的内存区域的任务可以将数据传递给一个被限制在不同的受保护内存区域的任务

 官方文档当中也提供了阻塞队列的解释,原文如下

队列 API 函数允许指定阻塞时间。

1.当一个任务试图从一个空队列中读取时,该队列将 进入阻塞状态(因此它不会消耗任何 CPU 时间,且其他任务可以运行) 直到队列中的数据变得可用,或者阻塞时间过期。

2.当一个任务试图写入到一个满队列时,该队列将 进入阻塞状态(因此它不会消耗任何 CPU 时间,且其他任务可以运行) 直到队列中出现可用空间,或者阻塞时间过期。

3.如果同一个队列上有多个处于阻塞状态的任务, 那么具有最高优先级的任务将最先解除阻塞。

 官方文档当中也提供了队列的相关函数,如创建队列,队列发送,队列接收这些函数,由于官方文档解释得很清除,所有有兴趣的可以直接去看官方文档,链接如下

xQueueCreate - FreeRTOS™

 xQueueSend - FreeRTOS™

 xQueueSendFromISR - FreeRTOS™

xQueueReceive - FreeRTOS™

xQueueReceiveFromISR - FreeRTOS™

函数名以FromISR结尾的函数都是用在中断当中的,不能用于普通任务,这些也只是一小部分,一般对于任务间通信,需要配合信号量来进行同步互斥,如果涉及到资源的竞争,还需要互斥锁来进行共享资源的使用分配

 

 


http://www.mrgr.cn/news/57097.html

相关文章:

  • STM32烧写准备
  • 梧桐数据库的行转列
  • C++面向对象-继承,多态,重载
  • nginx子目录部署访问并且刷新不报404
  • SHELL脚本之循环语句的for循环以及中断循环的语句
  • 研究效率倍增:12个Zotero插件助你轻松管理文献
  • 看完这篇,轻松搞定JavaScript复杂的问题
  • 基于Word2Vec和LSTM实现微博评论情感分析
  • 给c++小白的教程11:优化(1)
  • Django自定义过滤器
  • ffmpeg环境
  • 拍摄照片(鸿蒙系统01)
  • D46【python 接口自动化学习】- python基础之类
  • stl(1)pair
  • JVM、字节码文件介绍
  • 四、多线程带来的的⻛险-线程安全
  • webpack4 - 动态导入文件 dynamic-import 报错的解决方法
  • 安装Python及pip使用方法详解
  • 重生之“我打数据结构,真的假的?”--1.单链表(无习题)
  • React写关键字高亮的三个方案
  • 第二期:第15节,beep 大海
  • latex表格单独编译成pdf表格
  • 华为配置 之 划分VLAN
  • 哪些WordPress的AI插件,更适合收集整理地球前100大行业的信息和关键词?谢谢。0.1
  • SAP B1 缺少税务科目 - 报错 debug
  • 秃姐学AI系列之:FCN + 代码实现