队列操作(深入理解FreeRTOS队列之队列实战)

news2025/4/5 20:45:27

文章目录

    • 一、队列的操作
    • 二、学习总结

在FreeRTOS中,队列的本质是环形缓冲区。

一、队列的操作

1、创建队列 2、写队列 3、读队列

详细可看此篇博客:FreeRTOS——队列(基于百问网DshanMCU-F103实现挡球板游戏改造)-CSDN博客

基于链表解析队列的使用:
在这里插入图片描述

代码示例:

#include "FreeRTOS.h"
#include "task.h"
#include "queue.h"

static QueueHandle_t g_xQueueInput;

/**********************************************************************
 * 函数名称: InitInputQueue
 * 功能描述: 初始化输入队列-创建队列
 * 输入参数: 无
 * 输出参数: 无
 * 返 回 值: 0-成功, 其他值-失败
 ***********************************************************************/ 
int InitInputQueue(void)
{
	//创建队列
	g_xQueueInput = xQueueCreate(BUFFER_SIZE, sizeof(InputEvent));
	if (g_xQueueInput == NULL)
	{
		printf("can not create queue\r\n");
		return -1;
	}
	else
	{
		return 0;
	}
	
}

/**********************************************************************
 * 函数名称: PutInputEvent
 * 功能描述: 往环形缓冲区放入数据-写队列操作
 * 输入参数: ptInputEvent-输入事件
 * 输出参数: 无
 * 返 回 值: 0-成功, 其他值-失败
 ***********************************************************************/ 
int PutInputEvent(PInputEvent ptInputEvent)
{
	/* 写队列 */
	xQueueSendFromISR(g_xQueueInput, ptInputEvent, NULL);
	return 0;
}

/**********************************************************************
 * 函数名称: GetInputEvent
 * 功能描述: 从环形缓冲区读取数据-读队列操作
 * 输入参数: 无
 * 输出参数: ptInputEvent-用来保存输入事件
 * 返 回 值: 0-成功, 其他值-失败
 ***********************************************************************/ 
int GetInputEvent(PInputEvent ptInputEvent)
{
	/* 读队列 */
	xQueueReceive(g_xQueueInput, ptInputEvent, portMAX_DELAY);
	return 0;
}

上述代码,能够实现向输入环形缓冲区中写入/读取数据的操作,队列的使用能够使程序变得简单易懂,可读性变高。

二、学习总结

队列在FreeRTOS中是用于任务间或任务与中断服务程序之间通信的机制,它支持任务间的数据交换和信息同步。API函数提供队列创建、删除、重置以及查看队列状态等功能,使开发者能够灵活管理队列资源。

FreeRTOS提供了多种队列,如xQueuexQueueCreateMutexxQueueCreateCountingSemaphore等,分别适用于不同的使用场景。

任务通过xQueueSend()函数向队列发送数据,而xQueueReceive()用于从队列接收数据。中断服务程序通过xQueueSendFromISR()函数向队列发送数据。

应用场景:

  • 多任务数据传递:在多任务应用中,队列常用于传递任务间的执行结果或控制命令,实现任务的解耦和模块化设计。
  • 资源共享与同步:队列可用于共享资源的访问控制,通过发送和接收信号来实现资源的请求和释放,确保资源的有效同步。
  • 等等

参考:

深入理解FreeRTOS队列之队列实战 (100ask.net)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2064567.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

css之grid布局(网格布局)

简述&#xff1a; 网格布局顾名思义就是将元素呈现为网状的整齐布局 简单使用&#xff1a; <div><div class"test"><div class"item">1</div><div class"item">2</div><div class"item">…

开发一个免费的图表网站 Free Charts

Free Charts 项目背景 最近在使用图表网站时&#xff0c;发现许多都需要收费&#xff0c;因此萌生了自己做一个免费图表网站的想法。 不仅给自己做一个&#xff0c;也准备给大家做一个&#xff01; 项目历程 经过两三周的努力&#xff0c;完成了一个图表网站。以下是技术栈的…

Tomcat热加载和热部署

2. Tomcat热加载和热部署 在项目开发过程中&#xff0c;经常要改动Java/JSP 文件&#xff0c;但是又不想重新启动Tomcat&#xff0c;有两种方式:热加载和热部署。热部署表示重新部署应⽤&#xff0c;它的执行主体是Host。 热加载表示重新加载class&#xff0c;它的执行主体是C…

视频文件太大怎么变小?教你学会快速压缩

视频文件太大怎么变小&#xff1f;在数字时代&#xff0c;视频已成为我们日常生活中不可或缺的一部分&#xff0c;无论是工作汇报、学习资料、还是休闲娱乐&#xff0c;视频都扮演着重要角色。但高清视频往往占用了大量的存储空间&#xff0c;还可能在分享或上传时遇到诸多不便…

语雀:高效记录与整理编程学习笔记的最佳实践

目录 语雀&#xff1a;高效记录与整理编程学习笔记的最佳实践 一、编程学习笔记的要求与目的 二、记录编程学习笔记的目的 三、如何高效地记录与整理编程学习笔记 四、推荐平台&#xff1a;语雀 1、语雀的优势&#xff1a; 2、如何使用语雀整理编程学习笔记&#xff1a;…

【大模型系列篇】人工智能与智能计算的发展

&#x1f525;&#x1f525;&#x1f525; 来自 中国工程院院士、中国科学院计算技术研究所研究员 孙凝晖 第十四届全国人大常委会专题讲座上的讲稿《人工智能与智能计算的发展》 “把新一代人工智能作为推动科技跨越发展、 产业优化升级、生产力整体跃升的驱动力量&#xff0c…

项目启动端口报冲突如何处理?

你是否在Angular项目启动的时候试过端口报冲突呢&#xff1f;那么要如何解决呢&#xff1f;vue2又如何处理呢&#xff1f; 一、Angular冲突原因 Angular CLI 默认使用 4200 端口&#xff0c;如果这个端口已被占用&#xff08;比如启动了两次&#xff0c;或者本地可能有别的项目…

用IDEA创建一个SpringBoot项目和用官网创建一共SpringBoot项目导入IDEA(SpringBoot 学1)

一、用IDEA创建一个SpringBoot项目&#xff08;其实就说idea把网址集成到了软件上&#xff09; 1、选择java initializr创建项目框架 2、到下面这一步就和Maven项目的格式差不多&#xff0c;把项目名这些写上就行&#xff0c;选择对应的java版本 3、选择SpringBoot版本和勾选S…

描述一下SIFT特征提取算法的工作原理

SIFT&#xff08;Scale-Invariant Feature Transform&#xff0c;尺度不变特征变换&#xff09;是由 David Lowe 于 1999 年提出的一种特征提取算法&#xff0c;用于检测和描述图像中的局部特征点。SIFT 特征具有旋转、尺度和光照不变性&#xff0c;因此在各种计算机视觉任务中…

深入浅出链表

目录 1.链表的基本概念及结构 1.1基本概念 1.2结构 2.链表的分类 3.链表的实现&#xff08;循环链表增删查改实现&#xff09; 1.动态申请节点&#xff08;结点&#xff09;​编辑 2.单链表打印 3.单链表尾插 4.单链表头插 5.单链表尾删 6.单链表头删 7.单链表查找 …

瑞吉外卖-登录时报错:接口404异常

一、错误描述 出现“系统接口404异常”的弹窗&#xff0c;同时一直显示登录中&#xff0c;而无法跳转到后台页面。 二、解决方法 1. 检查浏览器的网址 确保为localhost:8080/backend/page/login/login.html&#xff0c;而不是idea自动生成的&#xff0c;修改过来即可。 2.确…

CSS文字描边

// 方法3 const p document.querySelector("p")p.dataset.content p.textContentmixin text-stroke($color: #fff, $width: 1px) {text-shadow: 0 -#{$width} #{$color}, #{$width} 0 #{$color},0 #{$width} #{$color}, -#{$width} 0 #{$color},-#{$width} -#{$wid…

Linux软件编程---数据库

目录 一、数据库 1.1.概念 1.2.类型 1.关系型数据库 2.非关系型数据库 1.3.SQL语言 1.4.如何在Linux安装sqlite数据库 1.确保虚拟机可以上网 2.配置apt-get工具集合 3.安装sqlite数据库 1.5.sqlite3 1.创建数据库 2.查看数据表 3.退出数据库 4.SQL语句 二、数…

XShell给Ubuntu虚拟机安装MySQL

准备工作&#xff1a;已经装好了虚拟机&#xff0c;并且已经下载了Linux系统&#xff0c;如 Linux Mint &#xff0c; Ubuntu 等&#xff0c;今天以目前较为流行的Ubuntu为示例 1.为什么选择Linux&#xff1f; 在现代软件开发中&#xff0c;Linux系统已成为开发和部署的首选平…

面试中被问到各个测试阶段的具体工作,如何详细描述

软件测试工程师面试的时候有一个问题也是一定会被问到的&#xff0c;那就是&#xff1a;你们的软件项目都会经过哪些测试阶段呢&#xff1f;每个阶段测试人员都做什么&#xff1f;接下来&#xff0c;凯哥就为各位小伙伴详细的说一说&#xff1a; 首先&#xff0c;一般的软件测…

Java 入门指南:Set 接口

Collection 接口 Collection 接口提供了一系列用于操作和管理集合的方法&#xff0c;包括添加、删除、查询、遍历等。它是所有集合类的根接口&#xff0c;包括 List、Set、Queue 等。 Collection 接口常见方法 add(E element)&#xff1a;向集合中添加元素。 addAll(Collecti…

【C++ Primer Plus习题】2.4

问题: 解答: #include <iostream> using namespace std;const int yearToMonth 12;int main() {short age 0;cout << "请输入您的芳龄:" << endl;cin >> age;int months age * yearToMonth;cout << age << "岁已经在世…

Wemos D1 Mini pro/ nodeMcu / ESP8266 驱动 240*320 ILI9431 SPI液晶屏

Wemos D1 Mini / nodeMcu / ESP8266 驱动 240*320 ILI9431 SPI液晶屏 效果展示器件硬件连接引脚连接原理图引脚对照表 安装TFT_eSPI库TFT_eSPI库中User_Setup.h文件的参数修改User_Setup.h文件的位置User_Setup.h文件中需要修改的参数User_Setup.h完成源码 例程 缘起&#xff1…

狗都能看懂的可变形卷积详解

Deformable Convolution Networks 论文地址&#xff1a;https://arxiv.org/pdf/1703.06211 官方源码&#xff1a;https://github.com/msracver/Deformable-ConvNets/tree/master Deformable Convolution 文章提出了可变形卷积和可变形ROI采样。原理是一样的&#xff0c;这里先…

软件测试-测试分类

测试分类 按照测试目标测试 界面测试 页面内展示的所有内容/元素都需要测试 参考UI图找不同 功能测试 ​ 如何设计功能测试用例&#xff1f; 参考产品规格说明书进行用例的编写&#xff0c;具体的测试用例需要使用黑盒设计测 试用例的方法&#xff0c;如等价类、边界值、…