【RTOS】快速体验FreeRTOS所有常用API(4)队列

这篇具有很好参考价值的文章主要介绍了【RTOS】快速体验FreeRTOS所有常用API(4)队列。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

快速体验FreeRTOS所有常用API(1)工程创建
快速体验FreeRTOS所有常用API(2)任务管理
快速体验FreeRTOS所有常用API(3)同步与互斥
快速体验FreeRTOS所有常用API(4)队列
快速体验FreeRTOS所有常用API(5)信号量、互斥量
快速体验FreeRTOS所有常用API(6)事件组
快速体验FreeRTOS所有常用API(7)任务通知
快速体验FreeRTOS所有常用API(8)软件定时器
快速体验FreeRTOS所有常用API(9)中断管理
快速体验FreeRTOS所有常用API(10)资源管理
快速体验FreeRTOS所有常用API(11)打印空闲栈、CPU占用比

四、队列

该部分在上份代码基础上修改得来,代码下载链接:

https://wwzr.lanzout.com/iBNAS1l75bvc 密码:7xy2

该代码尽量做到最简,不添加多余的、不规范的代码。

内容主要包括

(1)队列的概念、创建、写队列、读队列

(2)队列集(可跳过)

最终实现效果:

(1)任务1写队列,任务2读队列。

(2)任务1、任务2 写队列并使用队列集,任务3读队列集(可跳过)

【RTOS】快速体验FreeRTOS所有常用API(4)队列,嵌入式,FreeRTOS,stm32,ROTS

4.1 概念

队列是一种用于在任务之间传递数据的强大机制。队列提供了一种安全且高效的方式,允许一个任务将数据发送到队列,而另一个任务则从队列中接收数据。

使用场景

  1. 任务间通信: 通过队列,一个任务可以将数据发送给另一个任务,实现任务间的通信。
  2. 生产者-消费者模型: 队列常用于生产者任务生成数据,然后通过队列传递给消费者任务进行处理。
  3. 实现有限缓冲区: 队列可以用于实现有限的缓冲区,限制生产者和消费者的速度。

4.2 创建队列

使用xQueueCreate函数来创建一个队列。函数原型如下:

QueueHandle_t xQueueCreate(UBaseType_t uxQueueLength, UBaseType_t uxItemSize);
/*
uxQueueLength:队列的长度,表示队列中可以存储的元素个数。
uxItemSize:每个队列元素的大小,以字节为单位。
*/

示例:

// 定义队列句柄
QueueHandle_t g_xQueueTest;

// 创建队列,大小为5个int元素
g_xQueueTest= xQueueCreate(5, sizeof(int));

这将创建一个能够存储5个int类型元素的队列。

4.3 写队列

使用xQueueSend函数向队列发送数据。函数原型如下:

BaseType_t xQueueSend(QueueHandle_t xQueue, const void *pvItemToQueue, TickType_t xTicksToWait);
/*
xQueue:目标队列的句柄。
pvItemToQueue:指向要发送的数据的指针。
xTicksToWait:发送超时时间,若为0,则一直等待;若为portMAX_DELAY,则无限等待;其他情况表示等待的时钟节拍数。
*/

示例

int data = 42;
// 发送数据到队列,如果队列已满,则阻塞
xQueueSend(g_xQueueTest, &data, portMAX_DELAY);

4.4 读队列

使用xQueueReceive函数从队列接收数据。函数原型如下:

BaseType_t xQueueReceive(QueueHandle_t xQueue, void *pvBuffer, TickType_t xTicksToWait);
/*
xQueue:目标队列的句柄。
pvBuffer:接收数据的缓冲区指针。
xTicksToWait:接收超时时间,若为0,则立即返回;若为portMAX_DELAY,则无限等待;其他情况表示等待的时钟节拍数。
*/

示例

int receivedData;
// 从队列接收数据,如果为空,则阻塞
xQueueReceive(g_xQueueTest, &receivedData, portMAX_DELAY);

实例:

创建队列、创建任务12

【RTOS】快速体验FreeRTOS所有常用API(4)队列,嵌入式,FreeRTOS,stm32,ROTS

任务1写队列,如果满了就阻塞。

任务2读队列,如果空了就阻塞。

现象是:代码设置的是任务1 写队列较快,所以现象是任务1 的cnt很快的加到20(20为我们创建的队列最大长度),然后阻塞,等任务2 去读队列,任务2每次读一个数据,队列就变为非空,任务1就被唤醒,cnt就++。

【RTOS】快速体验FreeRTOS所有常用API(4)队列,嵌入式,FreeRTOS,stm32,ROTS

4.5 队列集(可跳过)

队列集(需要改FreeRTOSConfig.h)文章来源地址https://www.toymoban.com/news/detail-791673.html

到了这里,关于【RTOS】快速体验FreeRTOS所有常用API(4)队列的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【RTOS学习】CubeMX对FreeRTOS的适配

    🐱作者:一只大喵咪1201 🐱专栏:《RTOS学习》 🔥格言: 你只管努力,剩下的交给时间! 经过前面的学习,现在我已经对FreeRTOS有了一个初步的认识,而且也可以使用FreeRTOS来写代码了,为了让我们的开发更加方便迅速,本喵来介绍下如何使用CubeMX来配置带有FreeRTOS的工程。

    2024年02月07日
    浏览(49)
  • freertos学习之路1-裸机和rtos的区别

    由于工作需要,需要开始学习freertos的相关知识,本专题主要记录freertos的相关内容 参考: https://www.bilibili.com/video/BV19g411p7UT 正点原子视频 试想一种场景,我们正在打游戏,但女朋友在你打游戏的过程中给你发送消息,你需要回复消息 1.1 裸机处理方式 玩过51或者stm32的裸机编

    2023年04月17日
    浏览(42)
  • 【RTOS学习】FreeRTOS中的链表 | 堆的管理

    🐱作者:一只大喵咪1201 🐱专栏:《RTOS学习》 🔥格言: 你只管努力,剩下的交给时间! 链表是FreeRTOS的核心结构,它让系统的功能正常运行,本喵下面来解释一下FreeRTOS中的链表结构以及操作。 如上图所示是FreeRTOS源码中的链表的定义 List_t ,这是一个链表头,重要的成员

    2024年02月04日
    浏览(43)
  • [RTOS]rtthread,freeRTOS,uCOS等系统简单对比

    在上一篇《嵌入式操作系统浅谈》中,大概介绍了我自己再工作中使用到的如rt-thread,freeRTOS,uCOS,luatos等系统,在这一篇文章中,我简单说一下这些操作系统一些特点,还有就是我们平时的工作中什么场景下用哪种系统比较好。 csdn里面很多大神对上面的一些系统都做过了

    2023年04月15日
    浏览(29)
  • 要单片机和RTOS有必要学习嵌入式linux吗?

    学习嵌入式 Linux 是否有必要,取决于你的项目需求和职业发展目标。以下是一些考虑因素: 项目需求:如果你的项目需要处理复杂的网络、文件系统、多任务管理等功能,嵌入式 Linux 可能是更适合的选择。Linux 提供了丰富的开源软件包和驱动程序,可以加速开发过程并提供

    2024年02月14日
    浏览(58)
  • Azure RTOS & 嵌入式无线网络框架简化物联网应用开发

    一、Azure RTOS概述 Azure RTOS 是一个实时操作系统 (RTOS),适用于由微控制器 (MCU) 提供支持的物联网 (IoT) 和边缘设备, Azure RTOS 旨在支持高度受限设备(电池供电,并且闪存容量不到 64 KB)。简而言之,这就是一套完整的针对于物联网应用开发的带有多线程功能,中间件和桌面

    2024年02月08日
    浏览(66)
  • IDE也卷了,微软杀入嵌入式IDE_microsoft azure rtos开源吗(1)

    因为,这几年物联网的快速发展,迫使微软布局嵌入式。 早在2019年,微软重金收购 ThreadX 嵌入式实时操作系统,然后,紧接着 在 2020 年,开源了Azure RTOS ThreadX 。 在去年底(2021年12月), 微软发布了基于 VS 2022 的支持嵌入式RTOS、MCU软件开发的IDE 。 在本月初(2022年3月),

    2024年04月16日
    浏览(82)
  • FreeRTOS-消息队列详解

    ✅作者简介:嵌入式入坑者,与大家一起加油,希望文章能够帮助各位!!!! 📃个人主页: @rivencode的个人主页 🔥系列专栏: 玩转FreeRTOS 💬保持学习、保持热爱、认真分享、一起进步!!! 本文将详细全方位的讲解FreeRTOS的队列消息,其实在FreeRTOS中队列的重要性也不言

    2024年02月05日
    浏览(47)
  • FreeRTOS(3)----消息队列

    一.消息队列的基本概念 队列成为消息队列,可以进行任务与任务间,中断和任务间传递信息,实现任务接收来自其他任务或中断的不固定长度的消息,任务可以从队列中读取消息,当队列消息为空的时候,读取消息的任务将会被阻塞,但是可以设定等待阻塞任务的时候xTic

    2024年03月18日
    浏览(73)
  • FreeRTOS - 消息队列

    消息队列(queue):可以在任务与任务间、中断和任务间传递消息,实现任务接收来自其他任务或中断的不固定的消息 1、使用消息队列检测串口输入 2、通过串口发送字符串openled1,openled2,openled3,分别打开板载led1,led2,led3 3、通过串口发送字符串closeled1,closeled2,closele

    2023年04月08日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包