您的位置:首页 > 文旅 > 美景 > 队列操作(深入理解FreeRTOS队列之队列实战)

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

2024/12/24 7:51:14 来源:https://blog.csdn.net/weixin_62897522/article/details/141437224  浏览:    关键词:队列操作(深入理解FreeRTOS队列之队列实战)

文章目录

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

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

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com