8.FreeRTOS_队列集

队列集使用在系统需要支持多个输入设备的情况,这是每个输入设备的数据都存放在一个队列中,队列集将他们管理起来,可以实现实时识别哪一个队列中有数据并将数据读取出来。

相关配置

使用队列集的函数,需要先开启宏开关。具体操作如下:

创建队列集

函数声明如下:

QueueSetHandle_t xQueueCreateSet( const UBaseType_t uxEventQueueLength )

uxEventQueueLength :队列集长度,该值等于所存队列的长度之和

QueueSetHandle_t :队列集句柄

队列与队列集建立联系

队列要先与队列集建立联系,这时队列集中并没有队列的句柄。

函数声明如下:

BaseType_t xQueueAddToSet( QueueSetMemberHandle_t xQueueOrSemaphore,QueueSetHandle_t xQueueSet )

xQueueOrSemaphore:队列句柄

xQueueSet :队列集句柄

读队列集

函数声明如下:

QueueSetMemberHandle_t xQueueSelectFromSet( QueueSetHandle_t xQueueSet,TickType_t const xTicksToWait )

返回值:有数据的队列句柄

xQueueSet:队列集句柄

xTicksToWait :超时时间,portMAX_DELAY为死等

验证实验

实验内容为:创建三个任务,其中两个任务分别向自己的队列中写数据,任务三对队列集进行读取,并打印读到的数据。编写步骤如下:

  • 创建任务1、任务2所用的队列
  • 创建队列集
  • 将队列与队列集建立联系
  • 编写任务处理函数:任务1,任务2不断写队列,任务3读队列集

 具体代码如下:

void Task1Function(void *param){int i=1;while(1){xQueueSend((QueueHandle_t)param,&i,portMAX_DELAY);/* 写队列 */i++;vTaskDelay(10);}
}
void Task2Function(void *param){int i=-1;while(1){xQueueSend((QueueHandle_t)param,&i,portMAX_DELAY);/* 写队列 */i--;vTaskDelay(10);}
}
void Task3Function(void *param){QueueSetMemberHandle_t handle;int i;while(1){/* 读队列集,返回有数据的队列句柄 */handle = xQueueSelectFromSet((QueueSetHandle_t)param,portMAX_DELAY);/* 读队列,获取数据 */xQueueReceive(handle,&i,0);printf("%d ",i);}
}
int main( void )
{TaskHandle_t xHandleTask1;TaskHandle_t xHandleTask2;TaskHandle_t xHandleTask3;QueueHandle_t QueueHandle_Test1;			/* 队列句柄,这是个指针 */QueueHandle_t QueueHandle_Test2;			/* 队列句柄,这是个指针 */QueueSetHandle_t QueueSetHandle_Test;       /* 队列集句柄,这是个指针 */struct test tParam;prvSetupHardware();SerialPortInit();printf("UART TEST\r\n");/* 1.创建队列 */QueueHandle_Test1 = xQueueCreate(2,sizeof(int));/* 创建队列1 */if(QueueHandle_Test1 == NULL){printf("queue create fail\r\n");}QueueHandle_Test2 = xQueueCreate(2,sizeof(int));/* 创建队列2 */if(QueueHandle_Test2 == NULL){printf("queue create fail\r\n");}/* 2.创建队列集 *//* 队列1和队列2的长度都为2,所以队列集的长度=2+2=4 */QueueSetHandle_Test = xQueueCreateSet(4);/* 3.队列与队列集建立链接 */xQueueAddToSet(QueueHandle_Test1,QueueSetHandle_Test);xQueueAddToSet(QueueHandle_Test2,QueueSetHandle_Test);/* 4.创建任务 */xTaskCreate(Task1Function,"Task1",100,(void*)QueueHandle_Test1,2,&xHandleTask1);xTaskCreate(Task2Function,"Task2",100,(void*)QueueHandle_Test2,1,&xHandleTask2);xTaskCreate(Task3Function,"Task3",100,(void*)QueueSetHandle_Test,1,&xHandleTask3);vTaskStartScheduler();return 0;
}

运行结果如下:

可以看到任务3已经读到了来自任务1、任务2写入队列1、队列2的数据。

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

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

相关文章

Office动态水印终于来了

在信息安全日益重要的今天,保护敏感信息变得尤为关键。目前,动态水印甚至是盲水印技术已经在各种企业软件中广泛应用,常见的钉钉和企业微信等都已经支持此类技术,用户查看消息时画面会显示对应用户的姓名和工号等,而作…

服务器清除BIOS之后引导不了,如何解决??

🏆本文收录于《CSDN问答解答》专栏,主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&…

多模态中的高分辨率如何处理?

https://zhuanlan.zhihu.com/p/702811733https://zhuanlan.zhihu.com/p/702811733 切块 1.MiniCPM-llama3-v 2.5 LLaVA-UHD:an LMM perceiving any aspect ratio and high-resolution images-CSDN

微信支付商家转账到零钱各场景怎么开通

微信支付商家转账到零钱在不少企业的项目运营者起着至关重要的作用,目前因为增加了人工审核,给企业申请该接口增加了较高的门槛。为了便利商户顺利开通零钱功能,下面就结合我们过去6年开通此类产品的经验,以2024年最新的商家转账到…

【前端6*】表格-表单2(弹窗在父组件)父子组件调用 vue element-ui

vue element-ui 中表单弹框的使用 写在最前面一、完整代码1、(子组件)E:\ui\参考代码\demo-new\src\components\detail.vue2、(父组件)E:\ui\参考代码\demo-new\src\views\Home.vue 二、小结 🌈你好呀!我是…

【Python基础教程】制作一个宿舍管理系统,数据库宿舍管理系统代码!(完整版,附源码)

今天我们一起学习一个新的小案例——宿舍管理系统。主要涉及列表、字典的初始化、增加、删除、修改和查询操作,以及函数的定义和调用。 一、需求: 有操作指引界面,显示操作号 能添加一个新的入住学生信息,包括学生姓名、宿舍号床…

ctfshow~菜狗杯 杂项签到

题目给了一个附件是png格式 用010editor打开看一下,直接Ctrlf搜索ctfshow得到flag ctfshow{a62b0b55682d81f7f652b26147c49040}

基于若依的ruoyi-nbcio流程管理系统修正自定义业务表单的回写bug

更多ruoyi-nbcio功能请看演示系统 gitee源代码地址 前后端代码: https://gitee.com/nbacheng/ruoyi-nbcio 演示地址:RuoYi-Nbcio后台管理系统 http://218.75.87.38:9666/ 更多nbcio-boot功能请看演示系统 gitee源代码地址 后端代码: h…

vscode篇---添加头部信息和debug查看explore expression

vscode篇—添加头部信息和debug看explore expression 1. 添加头部信息 具体步骤看下图 然后找到python.json 在这个文件中修改具体的头部信息 {// Place your snippets for python here. Each snippet is defined under a snippet name and has a prefix, body and // desc…

剖析 AI 对音乐的影响:创造还是毁灭之路

文章目录 📒一、引言 📒二、AI 降低音乐创作门槛 🚀(一)技术进步带来的便捷 🚀(二)对音乐普及的推动作用 📒三、AI 重塑音乐创作流程 🚀(一…

WebGL开发框架有哪些

WebGL开发框架是用于开发WebGL应用程序的Web框架。WebGL是一种基于JavaScript的API,可让Web浏览器呈现3D图形。WebGL开发框架可以帮助开发人员更轻松地创建复杂的3D图形应用程序。北京木奇移动技术有限公司,专业的软件外包开发公司,欢迎交流合…

蓝桥杯14小白月赛题解

直接输出pi/ti,for遍历 #include <iostream> using namespace std; #define int long long int a,b,c ; double t1.00; signed main() {cin>>a;int an0;for(int i1;i<a;i){cin>>b>>c;if(t>c*1.00/b){tc*1.00/b;ani;} }cout<<an<<e…

Java红娘婚恋相亲交友系统小程序源码

红娘婚恋相亲交友小程序&#xff1a;遇见爱情&#xff0c;从指尖开始&#x1f496; &#x1f4f1; 掌中红娘&#xff0c;随时待命 &#x1f48c; 在这个数字化时代&#xff0c;爱情也迎来了它的新舞台——“红娘婚恋相亲交友小程序”。只需轻轻一点&#xff0c;你的专属红娘就…

移动打车项目

1.技术栈&#xff1a; AndroidJNIHTTPSlibeventmysql/redis高德地图 2.概要流程设计 1.注册 2.登录 3.司机地理位置上传更新 4.乘客地理位置上传更新 5.乘客下单流程 6.司机完成订单流程

【CSS in Depth 2 精译_018】3.1.2 逻辑属性 + 3.1.3 用好逻辑属性的简写形式

当前内容所在位置&#xff08;可进入专栏查看其他译好的章节内容&#xff09; 第一章 层叠、优先级与继承&#xff08;已完结&#xff09; 1.1 层叠1.2 继承1.3 特殊值1.4 简写属性1.5 CSS 渐进式增强技术1.6 本章小结 第二章 相对单位&#xff08;已完结&#xff09; 2.1 相对…

vue 实现下拉框的数据是树状结构

页面显示效果 vue实现代码 <el-form-item label"公司名称" prop"comName"><el-select ref"select" v-model"queryParams.comName" placeholder"请选择公司名称" clearable size"small"change"handl…

微信小程序新建项目发现导航条不见了,及如何找回。

原因是现在小程序新建用的是 Skyline 渲染引擎 开启全局Skyline渲染引擎&#xff0c;因为Skyline不支持原生导航栏&#xff0c;所以就没显示原生导航栏了。 解决方法也很简单 app.json文件中的 “renderer”: “skyline”, 修改为 “renderer”:“webview”app.json文件中的…

【Linux杂货铺】期末总结篇4:shell编程

&#x1f308;个人主页&#xff1a;聆风吟_ &#x1f525;系列专栏&#xff1a;Linux实践室、网络奇遇记 &#x1f516;少年有梦不应止于心动&#xff0c;更要付诸行动。 文章目录 一. ⛳️什么是Shell脚本&#xff1f;二. ⛳️Shell 入门三. ⛳️Shell 变量3.1 &#x1f514;变…

从 Icelake 到 Iceberg Rust

本文作者丁皓是Databend 研发工程师&#xff0c;也是 ASF Member&#xff0c; Apache OpenDAL PMC Chair &#xff0c;主要研究领域包括存储、自动化与开源。 太长不看 Icelake 已经停止更新&#xff0c;请改用 iceberg-rust。 Iceberg-rust 是一个由社区驱动的项目&#xff0…

RocketMQ~架构与工作流程了解

简介 RocketMQ 具有高性能、高可靠、高实时、分布式 的特点。它是一个采用 Java 语言开发的分布式的消息系统&#xff0c;由阿里巴巴团队开发&#xff0c;在 2016 年底贡献给 Apache&#xff0c;成为了 Apache 的一个顶级项目。 在阿里内部&#xff0c;RocketMQ 很好地服务了集…