FreeRTOS队列集、事件标志组 | FreeRTOS十一

news2024/11/15 8:33:37

目录

说明:

一、队列集

1.1、队列集简介

1.2、队列集作用

二、队列集相关API函数

2.1、创建队列集函数

2.2、往队列集添加队列函数

2.3、队列集移除队列函数

2.4、获取队列集中有有效队列

三、事件标志组

3.1、什么是事件标志组

3.2、事件标志组的特点

3.3、事件标志组数据类型

3.4、事件标志组与队列、信号量区别

四、事件标志组相关API函数

4.1、常用的API函数

4.2、动态创建事件标志组函数

4.3、清除事件标志位函数

4.4、设置事件标志位函数

4.5、等待事件标志位函数


说明:

关于内容:

    1)以下内容多为概念了解与步骤分析

    2)暂无个人示例代码,使用的是FreeRTOS的官方示例代码

    3)若想移植代码测试的,请移步其它地方寻找,下文内容暂无个人示例代码供测试

关于其它:

    1)操作系统:win 10

    2)平台:keil 5 mdk

    3)语言:c语言

    4)板子:STM32系列移植FreeRTOS
 

一、队列集

1.1、队列集简介

        一个队列只允许任务间传递的信息为同一种数据类型,如果需要在任务间传递不同数据类型的信息时,可以使用队列集。

1.2、队列集作用

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

 

二、队列集相关API函数

2.1、创建队列集函数

函数名称:QueueSetHandle_t xQueueCreateSet(const UbaseType_t uxEventQueueLength)

作用:创建队列集

参数含义:

参数名:uxEventQueueLength,含义:队列集可容纳的队列数量

返回值:

返回,NULL,含义:队列集创建失败

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

2.2、往队列集添加队列函数

函数名称:BaseType_t xQueueAddToSet(QueueSetMemberHandle_t xQueueOrSemaphore, QueueSetHandle_t xQueueSet);

作用:往队列集添加队列

参数含义:

参数名:xQueuOrSemaphore,含义:待添加的队列句柄

参数名:xQueueSet,含义:队列集

返回值:

返回,pdPASS,含义:队列集添加队列成功

返回,pdFALL,含义:队列集添加队列失败

注意点:队列被添加到队列集时,队列中不能有有效的信息

2.3、队列集移除队列函数

函数名称:BaseType_t xQueueRemoveFromSet(QueueSetMemberHandle_t xQueueOrSemaphore, QueueSetHandle_t xQueueSet);

作用:队列集移除队列

参数含义:

参数名:xQueuOrSemaphore,含义:待移除的队列句柄

参数名:xQueueSet,含义:队列集

返回值:

返回,pdPASS,含义:队列集移除队列成功

返回,pdFALL,含义:队列集移除队列失败

注意点:队列集移除队列前,队列中不能有有效的信息

2.4、获取队列集中有有效队列

函数名称:QueueSetMemberHandle_t xQueueSelectFromSet(QueueSetMemberHandle_t xQueueSet, TickType_t const xTicksTowait);

作用:获取队列集中有有效消息的队列

参数含义:

参数名:xQueueSet,含义:队列集

参数名:xTicksTowait,含义:阻塞超时时间

返回值:

返回,NULL,含义:获取消息失败

返回,其他值,含义:获取到消息的队列句柄

三、事件标志组

3.1、什么是事件标志组

        事件标志位,用一个位,来表示事件是否发生。而事件标志组是一组事件标志位的集合,可以简单的理解事件标志组,本质上就是一个整数。

3.2、事件标志组的特点

        1)每一个位表示一个事件(高8位不算)

        2)每一个事件的含义,由用户自己决定

        3)任意任务或中断都可以读写这些位

        4)可以等待某一位成立,或等待多位同时成立

3.3、事件标志组数据类型

        使用了32位无符号的数据类型变量来存储事件标志,但其中高8位作存储事件标志组的控制信息,低24位作存储事件标志,所以说一个事件组最多可以存储24个事件标志。

如下图1:

 图1

3.4、事件标志组与队列、信号量区别

1)

名称:队列、信号量

唤醒对象:事件发生时,只会唤醒一个任务

事件清除:是消耗型的资源,队列数据被读取后就消失了,信号量被读取后就减少了

2)

名称:事件标志组

唤醒对象:事件发生时,所有符合条件的任务都会被唤醒

事件清除:被唤醒的任务由两个选择,可以保留不动,也可以清除事件

四、事件标志组相关API函数

4.1、常用的API函数

如下图2:

 图2

4.2、动态创建事件标志组函数

函数名称:EventGroupHandle_t xEventGroupCreate(void);

返回值:

返回,NULL,含义:事件标志组创建失败

返回,其他值,含义:事件标志组创建成功,返回句柄

4.3、清除事件标志位函数

函数名称:EventBits_t xEventGroupClearBits(EventGroupHandle_t xEventGroup

const EventBits_t uxBitsToClear);

参数:

名称:xEventGroup,含义:待操作的事件标志组句柄

名称:uxBitsToClear,含义:待清零的事件标志位

返回值:

返回,整数,含义:清零事件标志组之前,事件组中事件标志位的值

4.4、设置事件标志位函数

函数名称:EventBits_t xEventGroupSetBits(EventGroupHandle_t xEventGroup

const EventBits_t uxBitsToSet);

参数:

名称:xEventGroup,含义:待操作的事件标志组句柄

名称:uxBitsToSet,含义:待设置的事件标志位

返回值:

返回,整数,含义:事件组中事件标志位的值

4.5、等待事件标志位函数

函数名称:EventBits_t xEventGroupWaitBits(    EventGroupHandle_t xEventGroup,
                                                                            const EventBits_t uxBitsToWaitFor,
                                                                            const BaseType_t xClearOnExit,
                                                                            const BaseType_t xWaitForAllBits,
                                                                            const TickType_t xTicksToWait );

参数:

名称,xEvenrGroup,含义:等待的事件标志组句柄

名称,uxBitsToWaitFor,含义:等待的事件标志位,可以用逻辑或等待多个事件标志位

名称,xClearOnExit,含义:成功等待到事件标志位后,清除事件组中对应的事件标志位,
pdTRUE :清除uxBitsToWaitFor指定位;
pdFALSE:不清除

名称,xWaitForAllBits,含义:等待uxBitsToWaitFor中的所有事件标志位(逻辑与)
pdTRUE:等待的位,全部为1
pdFALSE:等待的位,某个为1

名称,xTicks ToWait,含义:等待的阻塞时间

返回值:

返回,等待的事件标志位,含义:等待事件标志位成功,返回等待到的事件标志位

返回,其它值,含义:等待事件标志位失败,返回事件组中的事件标志位

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

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

相关文章

Matlab傅里叶谱方法求解二维波动方程

傅里叶谱方法求解基本偏微分方程—二维波动方程 二维波动方程 将一维波动方程中的一维无界弦自由振动方程推广到二维空间上, 就得到了描述无界 (−∞<x,y<∞)(-\infty<x, y<\infty)(−∞<x,y<∞) 弹性薄膜的波动方程: ∂2u∂t2a2(∂2∂x2∂2∂y2)u(1)\frac…

HTML img和video object-fit 属性

简介 Css中object-fit主要是应用到img标签和Video标签的&#xff0c;来控制显示缩放效果的。 首先我们存在一张图片&#xff0c;原始图片的尺寸是 1080px x 600px, 展示效果如下&#xff1a; 如果我们的css样式中的img大小设定并不能满足图片的原始大小&#xff0c;比如我们的…

Syzkaller学习笔记---更新syz-extract/syz-sysgen(一)

Syzkaller学习笔记Syzkaller 安装文件系统内核Android common kernel参考文献syzkaller 源码阅读笔记-1前言syz-extractmainarchListcreateArchesworkerprocessArchprocessFileextractcheckUnsupportedCallsarchList小结syz-sysgenmainprocessJob()generateExecutorSyscalls()w…

Linux ALSA 之十一:ALSA ASOC Path 完整路径追踪

ALSA ASOC Path 完整路径追踪一、ASoc Path 简介二、ASoc Path 完整路径2.1 tinymix 设置2.2 完整路径 route一、ASoc Path 简介 如前面小节所描述&#xff0c;ASoc 中 Machine Driver 是 platform driver 和 codec driver 的粘合剂&#xff0c;audio path 离不开 FE/BE/DAI l…

绕过Nginx Host限制

目录绕过Nginx Host限制SNI第三种方法&#xff1a;总结绕过Nginx Host限制 SNI SNI&#xff08;Server Name Indication&#xff09;是 TLS 的扩展&#xff0c;这允许在握手过程开始时通过客户端告诉它正在连接的服务器的主机名称。 作用&#xff1a;用来解决一个服务器拥有…

机器视觉 多模态学习11篇经典论文代码以及解读

此处整理了深度学习&#xff0d;机器视觉&#xff0c;最新的发展方向&#xff0d;多模态学习&#xff0c;中的11篇经典论文&#xff0c;整理了相关解读博客和对应的Github代码&#xff0c;看完此系列论文和博客&#xff0c;相信你能快速切入这个方向。每篇论文、博客或代码都有…

【C++1】函数重载,类和对象,引用,string类,vector容器,类继承和多态,/socket,进程信号,public,ooci

文章目录1.函数重载&#xff1a;writetofile()&#xff0c;Ctrue和false&#xff0c;C0和非02.类和对象&#xff1a;vprintf2.1 构造函数&#xff1a;对成员变量初始化2.2 析构函数&#xff1a;一个类只有一个&#xff0c;不允许被重载3.引用&#xff1a;C中&取地址&#x…

Elasticsearch在Windows系统下的安装

Elasticsearch在Windows系统下的安装Elasticsearch在Windows系统下的安装1、安装 Java 环境2、安装 Elasticsearch&#xff08;1&#xff09;下载 Elasticsearch 的 zip 安装包&#xff08;2&#xff09;下载安装包后解压文件&#xff08;3&#xff09;启动 Elasticsearch 服务…

C++多态(下)

大家好&#xff01;上一篇文章&#xff0c;主要是说了多态的概念和使用。这篇文章就会说一下多态的底层原理&#xff0c;如果对多态的使用和概念不清的可以看一下上篇文章(多态概念)。 文章目录1. 多态的原理1.1 虚函数表1.2 多态的原理1.3 动态绑定与静态绑定2. 多继承关系的…

第四章 MergeTree原理分析

一、存储结构 1.1 表引擎语法结构 CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster] (name1 [type1] [DEFAULT|MATERIALIZED|ALIAS expr1],name2 [type2] [DEFAULT|MATERIALIZED|ALIAS expr2],...INDEX index_name1 expr1 TYPE type1(...) GRANULARITY va…

【遇见青山】项目难点:解决超卖问题

【遇见青山】项目难点&#xff1a;解决超卖问题1.乐观锁方案2.悲观锁方案1.乐观锁方案 原始实现下单功能的方法&#xff1a; /*** 秒杀实现** param voucherId 秒杀券的ID* return Result*/ Override Transactional public Result seckillVoucher(Long voucherId) {// 查询优…

备战蓝桥杯【高精度加法和高精度减法】

&#x1f339;作者:云小逸 &#x1f4dd;个人主页:云小逸的主页 &#x1f4dd;Github:云小逸的Github &#x1f91f;motto:要敢于一个人默默的面对自己&#xff0c;强大自己才是核心。不要等到什么都没有了&#xff0c;才下定决心去做。种一颗树&#xff0c;最好的时间是十年前…

IDEA中使用自定义的maven

步骤 1.下载maven maven下载 2.配置maven 2.1设置环境变量 1.在“环境环境“–“系统环境“–“path”中加入&#xff08;设置到bin目录下&#xff09; 2.测试环境变量是否成功 C:\Users>mvn -v //在控制台输入mav -v,看是否输出以下结果 Apache Maven 3.9.0 (9b…

《MySQL系列-InnoDB引擎23》文件-InnoDB存储引擎文件-重做日志文件

InnoDB存储引擎文件 之前介绍的文件都是MySQL数据库本身的文件&#xff0c;和存储引擎无关。除了这些文件外&#xff0c;每个表存储引擎都有其自己独有的文件。本节将具体介绍与InnoDB存储引擎密切相关的文件&#xff0c;这些文件包括重做日志文件、表空间文件。 重做日志文件…

Docker的资源控制管理

目录 一、CPU控制 1、设置CPU使用率上限 2、设置CPU资源占用比&#xff08;设置多个容器时才有效&#xff09; 3、设置容器绑定指定的CPU 二、对内存使用进行限制 1、创建指定物理内存的容器 2、创建指定物理内存和swap的容器 3、 对磁盘IO配额控制&#xff08;blkio&a…

使用Docker容器部署java运行环境(java8 + mysql5.7 + redis5.0 + nginx1.14.1

环境&#xff1a;阿里云ECS服务器一.Docker环境安装1.1 安装工具sudo yum install -y yum-utils device-mapper-persistent-data lvm21.2 为yum源添加docker仓库位置yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo1.3 将软件…

【微信小游戏开发笔记】第二节:Cocos开发界面常用功能简介

Cocos开发界面常用功能简介 本章只介绍微信小游戏开发时常用的功能&#xff0c;其他功能不常用&#xff0c;写多了记不住&#xff08;其实是懒 -_-!&#xff09;&#xff1a; 层级管理器&#xff0c;用于操作各个节点。资源管理器&#xff0c;用于操作各种文件资源。场景编辑…

SpringMVC--简介和入门案例

SpringMVC简介 什么是MVC MVC是一种软件架构的思想&#xff0c;将软件按照模型、视图、控制器来划分 M:Model&#xff0c;模型层&#xff0c;指工程中的JavaBean&#xff0c;作用是处理数据 JavaBean分为两类: 一类称为实体类Bean:专门存储业务数据的&#xff0c;如 Studen…

西湖论剑初赛web wp

Node Magical Login 简单的js代码审计。 Flag分成了两部分。 第一部分&#xff1a; 这里就简单的判断了一下user是否等于admin&#xff0c;直接绕过。 第二部分&#xff1a; checkcode ! “aGr5AtSp55dRacer”&#xff0c;让其为真&#xff0c;利用数组绕过。 Flag为&#x…

家政服务小程序实战教程03-创建自定义应用

我们上一篇讲解了创建模型应用&#xff0c;模型应用是给管理员使用的。普通用户日常办理业务还是在小程序完成。 微搭中的小程序需要通过创建自定义应用来创建&#xff0c;进入控制台&#xff0c;点击应用&#xff0c;点击新建应用&#xff0c;选择新建自定义应用 输入应用的名…