十六、FreeRTOS之FreeRTOS队列集

本节需要掌握以下内容:

1,队列集简介(了解)

2,队列集相关API函数介绍(熟悉)

3,队列集操作实验(掌握)

一、队列集简介(了解)

一个队列值允许任务间传递的消息为同一数据类型,如果需要在任务间传递不同数据类型消息时,那么就可以使用队列集!

作用:用于对多个队列或信号量进行“监听”,其中不管哪一个消息到来,都可以让任务退出阻塞状态。

假设:有个接收任务,使用到队列接收和信号量的获取,如下:

,队列集相关API函数介绍(熟悉)

函数

描述

xQueueCreateSet()

创建队列集

xQueueAddToSet()

队列添加到队列集中

xQueueRemoveFromSet()

从队列集中移除队列

xQueueSelectFromSet()

获取队列集中有有效消息的队列

xQueueSelectFromSetFromISR()

在中断中获取队列集中有有效消息的队列

 2.1 创建队列集函数

QueueSetHandle_t     xQueueCreateSet( const  UBaseType_t   uxEventQueueLength );

此函数用于创建队列集。

形参

描述

uxEventQueueLength

队列集可容纳的队列数量

返回值

描述

NULL

队列集创建失败

其他值

队列集创建成功,返回队列集句柄

 2.2 队列添加到队列集中

BaseType_t xQueueAddToSet( QueueSetMemberHandle_t     xQueueOrSemaphore ,

        QueueSetHandle_t     xQueueSet    );

此函数用于往队列集中添加队列,要注意的时,队列在被添加到队列集之前,队列中不能有有效的消息

形参

描述

xQueueOrSemaphore

待添加的队列句柄

xQueueSet

队列集

返回值

描述

pdPASS

队列集添加队列成功

pdFAIL

队列集添加队列失败

2.3 队列集中移除队列

BaseType_t   xQueueRemoveFromSet( QueueSetMemberHandle_t    xQueueOrSemaphore ,
           
QueueSetHandle_t     xQueueSet );

此函数用于往队列集中添加队列,到注意的是,队列在被添加到队列集之前,队列中不能有效的消息

形参

描述

xQueueOrSemaphore

待移除的队列句柄

xQueueSet

队列集

返回值

描述

pdPASS

队列集移除队列成功

pdFAIL

队列集移除队列失败

2.4 获取队列集中有有效消息的队列

QueueSetMemberHandle_t     xQueueSelectFromSet( QueueSetHandle_t   xQueueSet,

                                                        TickType_t const   xTicksToWait )

此函数用于从队列集中移除队列,要注意的是,队列在队列集移除之前,必须没有有效的消息

形参

描述

xQueueOrSemaphore

待移除的队列句柄

xQueueSet

队列集

返回值

描述

pdPASS

队列集移除队列成功

pdFAIL

队列集移除队列失败

2.5  获取队列集中有有效消息的队列

QueueSetMemberHandle_t     xQueueSelectFromSet( QueueSetHandle_t   xQueueSet,

                                                        TickType_t const   xTicksToWait )

 此函数用于在任务中获取队列集中有效消息的队列

形参

描述

xQueueSet

队列集

xTicksToWait

阻塞超时时间

返回值

描述

NULL

获取消息失败

其他值

获取到消息的队列句柄

三、 队列集使用流程

1、启用队列集功能需要将宏configUSE_QUEUE_SETS 配置为1

2、创建队列集

3、创建队列或信号量

4、往队列集中添加队列或信号量

5、往队列发送信息或释放信号量

6、获取队列集的消息

四、队列集操作实验(掌握)

3.1、实验目的:

学习 FreeRTOS 的队列集相关API的使用。

3.2、实验设计:

将设计三个任务:start_task、task1、task2

三个任务的功能如下:

  • start_task:用来创建其它任务,并创建队列集,队列/信号量,将队列/信号量添加到队列集中
  • task1:用于扫描按键,当KEY0按下,往队列写入数据,当KEY1按下,释放二值信号量
  • task2:读取队列集中的消息,并打印

3.3 实验代码

demo.c

代码明天更,今天太晚了

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

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

相关文章

添加新公司代码的配置步骤-Part2

原文地址:配置公司代码 概述 在第一部分中,我讨论并列出了在 SAP 中构建新公司代码时企业结构部分所需的任务。在这篇博客中,我将列出并讨论 FI 模块中需要配置的内容。您还记得本主题涵盖六个部分。 企业结构 - 第 1 部分 FI 配置– 第 2…

【Linux】diff命令使用

diff命令 是一个用于比较两个文件或目录之间差异的命令。它可以显示两个文件之间的行级别差异,并以易于阅读的格式输出结果。 著者 由保罗艾格特、迈克海特尔、大卫海耶斯、理查德史泰尔曼和Len Tower撰写。 diff命令 -Linux手册页 语法 diff [选项] [文件1]…

【java设计模式】——代理设计模式,两种举例说明

代理设计模式 1.介绍 Spring 框架中AOP底层使用动态代理设计模式。通过学习动态代理设计模式可以很好的理解Spring框架AOP底层 代理模式(Proxy)是GoF23种设计模式之一。所谓代理模式是指客户端并不直接调用实际的对象,而是通过调用代理&am…

基于ssm家庭理财系统源码和论文

基于ssm家庭理财系统源码和论文743 idea 数据库mysql5.7 数据库链接工具:navcat,小海豚等 环境: jdk8 tomcat8.5 开发技术 ssm 摘要 随着Internet的发展,人们的日常生活已经离不开网络。未来人们的生活与工作将变得越来越数字化&#xff…

【文件上传系列】No.0 利用 FormData 实现文件上传、监控网路速度和上传进度(原生前端,Koa 后端)

利用 FormData 实现文件上传 基础功能:上传文件 演示如下: 概括流程: 前端:把文件数据获取并 append 到 FormData 对象中后端:通过 ctx.request.files 对象拿到二进制数据,获得 node 暂存的文件路径 前端…

PDF编辑器免费版有哪些?哪个好用?

日常工作和学习中,普通的PDF的阅读器通常无法进行编辑,更别说逆向导出成为Word、PPT或者Excel了。而且。市场上很多PDF编辑器还要收费。那么问题来了,PDF编辑器免费版有哪些呢?这就给大家安利几款,强烈建议收藏! PDF编辑器免费版一:PDF24 这款编辑器的功能有主要有PDF的合并、…

LiDAR 城市模型的 3D Python 工作流

1.引言 LiDAR(Light Detection and Ranging)是一种通过测量激光束从发射到返回的时间来测量距离,从而生成物体的三维表面模型的技术。这种技术在城市建模中具有广泛的应用,可以用于城市规划、环境监测、交通仿真等领域。而使用Pyt…

Linux查看命令的绝对路径

linux查看命令的绝对路径 在Linux中,可以使用以下命令来查看命令的绝对路径: 1、which 命令名 例如,要查看chronyc命令的绝对路径,可以运行: which chronyc 2、whereis 命令名 例如,要查看chronyc命令…

HMMER学习——(待完善)

HMMER profile HMM files A HMMER profile file looks like this, with …’s marking elisions made for clarity and space: 1.全基因组基因家族的分析系列之HMMER3.1使用 2. hmmalign - align sequences to an HMM profile

springboot集成邮箱验证功能

准备工作 开启SMTP服务 前往你的邮箱网站,以网易邮箱为例,打开网易邮箱地址,登录你的邮箱,进入邮箱管理后台界面。点击“设置”》》“POP3/SMTP/IMAP”后,点击开启SMTP服务即可。 技术实现 Spring Boot 发送邮件验证…

linux学习之详解文件

目录 1.先认识文件 2.c语言中常用文件接口 fopen(打开文件) 3.系统接口操作文件 open write 文件的返回值以及打开文件的本质 理解struct_file内核对象 了解文件描述符(fd)分配规则 重定向 dup接口 标准错误流 文件缓冲…

YITH WooCommerce Product Bundles Premium电商商城产品捆绑销售高级版

点击阅读YITH WooCommerce Product Bundles Premium电商商城产品捆绑销售高级版原文 YITH WooCommerce Product Bundles Premium电商商城产品捆绑销售高级版的作用是在您的商店中创建特别优惠,将产品捆绑在一起提供折扣和特价。 您如何从中受益: 您将…

Swift 中 User Defaults 的读取和写入

文章目录 前言介绍 User Defaults共享 User DefaultsUser Defaults 存储数据类型响应更改监控 User Defaults 更改覆盖User Defaults 设置考虑的替代方案Keychain 用于安全性用于跨平台的 CloudKit 结论 前言 User Defaults 是 Swift 应用程序存储在应用启动之间保持的首选项的…

Nginx实战教程二

一.介绍 本文介绍SPRINGBOOTVUE项目配置API服务器的两种情况 NGINX 配置VUE项目 二.vue项目和后端api接口不在同一台服务器 如果打包好的vue项目应用(dist) 和后端 api 接口没有运行在同一个主机上 此时需要在开发环境下将 API 请求代理到 API 所在服务器。通过配置 vue.confi…

基于ssm实验室课程管理系统源码和论文

idea 数据库mysql5.7 数据库链接工具:navcat,小海豚等 环境: jdk8 tomcat8.5 摘 要 随着科学实验规模的不断扩大,实验室课程数量的急剧增加,有关实验室课程的各种信息量也在不断成倍增长。面对庞大的信息量,就需要有…

HBase 使用JDK21

HBase 使用JDK21 启动zookeeper和hadoop 创建软件目录 mkdir -p /opt/soft cd /opt/soft下载软件 wget https://dlcdn.apache.org/hbase/2.5.6/hbase-2.5.6-hadoop3-bin.tar.gz解压 hbase tar -zxvf hbase-2.5.6-hadoop3-bin.tar.gz修改 hbase 目录名称 mv hbase-2.5.6-had…

一则广告,一个故事,这就我选择学习计算机专业的两个原因

还记得当初自己为什么选择计算机? 现在回想起来,当初驱使自己选择学习计算机专业的原因,一共有两个: 一、一则长城电脑的广告。 上个世纪80年代,我还在读小学,当时在中央电视台上经常播放着的长城电脑的一则…

Abaqus基础教程--胶合失效仿真

胶合是电子行业中常见的连接方式,abaqus中常用cohesive单元或者cohesive接触两种方法进行胶合失效仿真,这两种方式操作方法有所差别,但结果一般大同小异。 本例模型比较简单,建模过程从略,使用静态分析,使…

【GAMES101】三维变换

games101的第四节课讲了三维变换和观察变换,我们这里先记录一下三维变换的知识,后面再讲观察变换 齐次坐标下的三维变换 类似于解决之前二维变换平移的问题,三维变换下用齐次坐标通过增加一个维度来表示,第四个维度为1表示这是个…

无敌是多么的寂寞!一本书讲透Java多线程!吊打多线程从原理到实践!

摘要 互联网的每一个角落,无论是大型电商平台的秒杀活动,社交平台的实时消息推送,还是在线视频平台的流量洪峰,背后都离不开多线程技术的支持。在数字化转型的过程中,高并发、高性能是衡量系统性能的核心指标&#xff…