首页 > 其他分享 >队列操作(深入理解FreeRTOS队列之队列实战)

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

时间:2024-08-22 20:26:34浏览次数:11  
标签:实战 ptInputEvent FreeRTOS 队列 xQueueInput return 输入

文章目录


在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)

标签:实战,ptInputEvent,FreeRTOS,队列,xQueueInput,return,输入
From: https://blog.csdn.net/weixin_62897522/article/details/141437224

相关文章

  • 单调栈和单调队列优化DP
    单调栈和单调队列优化DPluoguP1725琪露诺一道比较板的题明显是一个DP,则有\[{dp}_i=\max_{j=i-r}^{i-l}dp_j+a_i\]如果暴力则为\(O(n^2)\)但是发现\(\max_{j=i-r}^{i-l}dp_j\)就是单调队列所解决的问题,所以直接单调队列维护即可#include<bits/stdc++.h>#defineFAS......
  • Linux系统中利用消息队列实现两个进程的通信
    在Linux系统中进程间的通信有很多的方法,这次利用消息队列实现进程的通信进程一的代码实现#include<sys/types.h>#include<sys/ipc.h>#include<stdio.h>#include<sys/msg.h>#include<sys/types.h>#include<sys/ipc.h>#include<string.h>structmsgbuf{ ......
  • 【FreeRTOS】任务调度与任务状态的介绍(二)
    一、任务调度调度器就是使用相关的调度算法来决定当前需要执行的哪个任务FreeRTOS一共支持三种任务调度方式:抢占式调度主要是针对优先级不同的任务,每个任务都有一个优先级,优先级高的任务可以抢占优先级低的任务。时间片调度主要针对优先级相同的任务,当多个任务的优先......
  • 推荐一款强大的Web前端项目工程框架,实战检验很强大,高效稳定(附源码)
     前言在当前的Web前端开发领域,开发者经常面临如何快速构建高效、稳定、可维护的大型中台系统的问题。现有的解-决方案往往存在study曲线陡峭、组件库不够丰富、开发效率低下等痛点。为了解决这些问题,MyUI应运而生,提供了一个丰富、高效的Web前端项目工程框架。介绍MyUI是......
  • 【Eureka】Eureka 介绍与实战
    1.Eureka简介Eureka是Netflix开发的一个服务注册和发现组件,主要用于微服务架构中。它的核心功能是帮助微服务之间进行通讯和管理,使得服务能够动态地发现彼此,实现灵活的服务调用和负载均衡。1.1核心概念服务注册中心(EurekaServer):这是一个中央注册中心,所有微服务实......
  • 配置策略路由实战 附带基础网络知识
    背景作为一个软件开发人员,不可能做到只负责业务开发工作,一旦功能上线或者系统切换就会遇到非常多考验开发人员个人能力的场景,网络调整就是非常重要的一个方面,如果你在系统上线的过程中无法处理一些简单的网络问题或者听不懂网工在说什么,那么就会导致自己负责的工作很难推进,因......
  • 网易新闻爬虫实战
    目录1.导入所需库2.定义请求头3.获取所有板块的链接4.获取新闻标题和详情链接5.获取新闻详情页内容6.多进程加速爬取7.保存数据到CSV文件分享一个关于如何使用Python编写网易新闻爬虫的项目。在这个项目中,我们将使用requests库来获取网页源代码,使用lxml库来解......
  • 高性能无锁队列 Disruptor 核心原理分析及其在i主题业务中的应用
    小结:生产者生产数据时,需要入队。消费者消费数据时,需要出队。入队时,不能覆盖没有消费的元素。出队时,不能读取没有写入的元素。因此,Disruptor中需要维护一个入队索引(生产者数据生产到哪里,对应AbstractSequencer中的cursor)和一个出队索引(所有消费者中消费进度最小的序号)。 ......
  • 数据结构:栈、队列详解篇
    数据结构:栈、队列详解篇一、栈(一)栈的概念(二)栈的实现1、结构定义2、功能实现(1)栈的初始化(2)栈的销毁(3)栈的扩容(4)压栈(5)出栈(6)取栈顶元素、判空、栈的大小(三)例题分析1、有效的括号题目分析二、队列(一)队列的概念(二)队列的实现1、结构定义2、功能实现(1)队列结点生成(2)队列初始......
  • FreeRTOS--列表和列表项
    目录1列表(Lists)2列表项(ListItems)3使用列表和列表项4使用实例在FreeRTOS中,列表和列表项是非常重要的数据结构,用于实现任务管理和调度。以下是关于这两个概念的详细介绍:1列表(Lists)列表是FreeRTOS中的一种数据结构,用于存储任务状态的信息。主要有两种类型的......