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

STM32 FreeRTOS消息队列

队列简介

队列是任务间通信的主要形式。 它们可以用于在任务之间以及中断和任务之间发送消息。

队列是线程安全的数据结构,任务可以通过队列在彼此之间传递数据。有以下关键特点:

  • FIFO顺序:队列采用先进先出 (FIFO) 的顺序,即先发送的消息会被先接收。
  • 线程安全:队列操作是原子的,确保在多任务环境中的数据完整性。
  • 阻塞和非阻塞操作:任务可以通过阻塞或非阻塞的方式发送和接收消息。如果队列满了或者为空,任务可以选择等待直到有空间或者数据可用,或者立即返回。
  • 优先级继承:FreeRTOS 支持基于优先级的消息传递,确保高优先级任务在队列操作期间不会被低优先级任务阻塞。
  • 可变长度项:队列中的项可以是不同长度的数据块,而不是固定大小。

使用队列,任务可以通过发送消息来共享信息,从而更好地协调和同步系统中的不同部分。

创建队列

函数

描述

xQueueCreate()

动态方式创建队列

xQueueCreateStatic()

静态方式创建队列

动态创建队列时,FreeRTOS会在运行时从其内置的堆中为队列分配所需的内存空间。这种方式更加灵活,允许系统根据需要动态调整内存。

相反,静态创建队列要求用户在编译时手动为队列分配内存,而不依赖于FreeRTOS的堆管理。这使得内存的分配在编写代码时就能确定,因此在资源受限或对内存使用有严格要求的嵌入式系统中可能更为合适。

总体而言,动态创建提供了更大的灵活性,但可能会增加堆管理的复杂性。静态创建则更为直观,适用于在编译时就能确定内存分配的情况。选择使用哪种方式通常取决于系统的需求和设计考虑。

往队列写入消息

函数

描述

xQueueSend()

往队列的尾部写入消息

xQueueSendToBack()

同 xQueueSend()

xQueueSendToFront()

往队列的头部写入消息

xQueueOverwrite()

覆写队列消息(只用于队列长度为 1 的情况)

xQueueSendFromISR()

在中断中往队列的尾部写入消息

xQueueSendToBackFromISR()

同 xQueueSendFromISR()

xQueueSendToFrontFromISR()

在中断中往队列的头部写入消息

xQueueOverwriteFromISR()

在中断中覆写队列消息(只用于队列长度为 1 的情况)

从队列读取消息

函数

描述

xQueueReceive()

从队列头部读取消息,并删除消息

xQueuePeek()

从队列头部读取消息

xQueueReceiveFromISR()

在中断中从队列头部读取消息,并删除消息

xQueuePeekFromISR()

在中断中从队列头部读取消息


http://www.kler.cn/a/506515.html

相关文章:

  • 使用DAS的导出和导入功能迁移GaussDB数据
  • 【JAVA】-JDK
  • Windows Subsystem for Linux (WSL) 中安装 Redis
  • openharmony设备测试XTS测评用例开发指导
  • 学术内容写作ChatGPT提示词分享
  • 【Qt 常用控件】按钮类(QPushButton、QRadioButton、QCheckBox)
  • 基于 requests 依赖包的 Python 爬虫实战
  • Linux第一课:LinuxC基础 学习记录day11
  • Docker 镜像制作原理 做一个自己的docker镜像
  • 【安卓开发】【Android】总结:安卓技能树
  • 如何学习Transformer架构
  • 目标检测中的Bounding Box(边界框)介绍:定义以及不同表示方式
  • 【MySQL】高级查询技巧 JOIN、GROUP BY、ORDER BY、UNION 应用案列解析
  • Java全栈项目-办公自动化OA系统
  • 计算机网络 (41)文件传送协议
  • 【Linux探索学习】第二十六弹——进程通信:深入理解Linux中的进程通信
  • 网关相关知识
  • 计算机网络 网络层 2
  • PyCharm与GitHub完美对接: 详细步骤指南
  • 基于YOLOv8的卫星图像中船只检测系统