【学习FreeRTOS】第16章——FreeRTOS事件标志组

1.事件标志组简介

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

事件标志组的特点:

  • 它的每一个位表示一个事件(高8位不算)
  • 每一位事件的含义,由用户自己决定,如:bit0表示按键是否按下,bit1表示是否接受到消息
    这些位的值为1:表示事件发生了;值为0:表示事件未发生
  • 任意任务或中断都可以读写这些位
  • 可以等待某一位成立,或者等待多位同时成立
    在这里插入图片描述

一个事件组就包含了一个 EventBits_t 数据类型的变量,变量类型 EventBits_t 的定义如下所示。EventBits_t 实际上是一个 16 位或 32 位无符号的数据类型 (一般设为32位)

typedef TickType_t EventBits_t;
#if ( configUSE_16_BIT_TICKS  = =  1 )typedef   uint16_t   TickType_t;
#else	typedef   uint32_t   TickType_t;
#endif
#define  configUSE_16_BIT_TICKS    0 

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

事件标志组和信号量存在区别,它们之间有一个可以沟通的桥梁——队列集,通过队列集可以模拟事件标志位
在这里插入图片描述

2.事件标志组相关API函数介绍

  • xEventGroupCreate():使用动态方式创建事件标志组
  • xEventGroupCreateStstic():使用静态方式创建事件标志组
  • xEventGroupClearBits():清零事件标志位
  • xEventGroupClearBitsFromISR():在中断中清零事件标志位
  • xEventGroupSetBits():设置事件标志位
  • xEventGroupSetBitsFromISR():在中断中设置事件标志位
  • xEventGroupWaitBits():等待事件标志位
  • xEventGroupSync():设置事件标志位,并等待事件标志位
  • vEventGroupDelete():删除事件标志组
  • xEventGroupGetBits():获取事件组中各事件标志位的值
  • xEventGroupGetBitsFromISR():在中断中获取事件组中各事件标志位的值

2.1.使用动态方式创建事件标志组xEventGroupCreate()

EventGroupHandle_t    xEventGroupCreate (void) ; 
  • 返回值:NULL,事件标志组创建失败;其他值,事件标志组创建成功,返回其句柄

2.2.清零事件标志位xEventGroupClearBits()

EventBits_t xEventGroupClearBits( 	EventGroupHandle_t 	xEventGroup,const EventBits_t 	uxBitsToClear) 
  • 形参xEventGroup:待操作的事件标志组句柄
  • 形参uxBitsToSet:待清零的事件标志位
  • 返回值:整数,清零事件标志位之前事件组中事件标志位的值

2.3.设置事件标志位xEventGroupSetBits()

EventBits_t  xEventGroupSetBits(  	EventGroupHandle_t 	xEventGroup,const EventBits_t 	uxBitsToSet)
  • 形参xEventGroup:待操作的事件标志组句柄
  • 形参uxBitsToSet:待设置的事件标志位
  • 返回值:整数,函数返回时事件组中事件标志位的值

2.4.等待事件标志位xEventGroupWaitBits()

EventBits_t	xEventGroupWaitBits(EventGroupHandle_t	xEventGroup,const EventBits_t 	uxBitsToWaitFor,const BaseType_t 	xClearOnExit,const BaseType_t 	xWaitForAllBits,TickType_t 			xTicksToWait)
  • 形参xEvenrGroup:等待的事件标志组句柄
  • 形参uxBitsToWaitFor:等待的事件标志位,(可以用逻辑或等待多个事件标志位)
  • 形参xClearOnExit:成功等待到事件标志位后,清除事件组中对应的事件标志位,pdTRUE清除;pdFALSE:不清除
  • 形参xWaitForAllBits:等待uxBitsToWaitFor 中的所有事件标志位(逻辑与)pdTRUE,等待的位全部为1;pdFALSE,等待的位某个为1
  • 形参xTicksToWait:等待的阻塞时间
  • 返回值
    等待的事件标志位值:等待事件标志位成功,返回等待到的事件标志位
    其他值:等待事件标志位失败,返回事件组中的事件标志位
  • 特点:可以等待某一位、也可以等待多位,等到期望的事件后,还可以清除某些位

注意,本函数只能完成设置标志位的某一位或者全部,并不能设置某几位。比如8各中的1个或8个,不能设置2-7个

2.5.设置事件标志位,并等待事件标志位xEventGroupSync()

EventBits_t	xEventGroupSync(EventGroupHandle_t	xEventGroup,const EventBits_t 	uxBitsToSet,const EventBits_t 	uxBitsToWaitFor,TickType_t 			xTicksToWait)
  • 形参xEvenrGroup:等待的事件标志组句柄
  • uxBitsToSet:达到同步点后,要设置的事件标志
  • uxBitsToWaitFor:等待的事件标志
  • xTicksToWait:等待的阻塞时间
  • 返回值
    等待的事件标志位值:等待事件标志位成功,返回等待到的事件标志位
    其他值:等待事件标志位失败,返回事件组中的事件标志位
  • 特点:同步——用于Task1完成后置1,等待Task2完成之后才算完成事件

3.事件标志组实验

  • 实验目的:学习 FreeRTOS 的事件标志组API函数的使用。
  • 实验设计:将设计三个任务:start_task、task1、task2
    start_task-用来创建task1和task2任务,并创建事件标志组
    task1-读取按键按下键值,根据不同键值将事件标志组相应事件位置一,模拟事件发生
    task2-同时等待事件标志组中的多个事件位,当这些事件位都置 1 的话就执行相应的处理
    在这里插入图片描述

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

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

相关文章

linux入门详解

文章目录 一、引言1.1 开发环境1.2 生产环境1.3 测试环境1.4 操作系统的选择 二、Linux介绍2.1 Linux介绍2.2 Linux的版本2.3 Linux和Windows区别 三、Linux安装3.1 安装VMware3.2 安装Xterm3.3 在VMware中安装Linux3.3.1 选择安装方式3.3.2 指定镜像方式3.3.3 选择操作系统类型…

《C语言编程环境搭建》工欲善其事 必先利其器

C语言编译器 GCC 系列 GNU编译器套装(英语:GNU Compiler Collection,缩写为GCC),指一套编程语言编译器,常被认为是跨平台编译器的事实标准。原名是:GNU C语言编译器(GNU C Compiler)。 MinGW 又称mingw32 &#xff0c…

DevOps中的持续测试优势和工具

持续测试 DevOps中的持续测试是一种软件测试类型,它涉及在软件开发生命周期的每个阶段测试软件。持续测试的目标是通过早期测试和经常测试来评估持续交付过程的每一步的软件质量。 DevOps中的持续测试流程涉及开发人员、DevOps、QA和操作系统等利益相关者。 持续…

组件库的使用和自定义组件

目录 一、组件库介绍 1、什么是组件 2、组件库介绍 3、arco.design 二、组件库的使用 1、快速上手 2、主题定制 3、暗黑模式 4、语言国际化 5、业务常见问题 三、自定义组件 2、组件开发规范 3、示例实践guide-tip 4、业务组件快速托管 一、组件库介绍 1、什么是…

9个python自动化脚本,PPT批量生成缩略图、添加图片、重命名

引言 最近一番在整理资料,之前买的PPT资源很大很多,但归类并不好,于是一番准备把这些PPT资源重新整理一下。统计了下,这些PPT资源大概有2000多个,一共30多G,一个一个手动整理这个投入产出比也太低了。 作为…

openGauss学习笔记-49 openGauss 高级特性-索引推荐

文章目录 openGauss学习笔记-49 openGauss 高级特性-索引推荐49.1 单query索引推荐49.2 虚拟索引49.3 workload级别索引推荐 openGauss学习笔记-49 openGauss 高级特性-索引推荐 openGauss的索引推荐的功能,共包含三个子功能:单query索引推荐、虚拟索引…

数据结构基础:P3-树(上)----编程作业02:List Leaves

本系列文章为浙江大学陈越、何钦铭数据结构学习笔记,系列文章链接如下: 数据结构(陈越、何钦铭)学习笔记 文章目录 一、题目描述二、整体思路与实现代码 一、题目描述 题目描述: 给定一棵树,按照从上到下、从左到右的顺序列出所有…

【填坑向】MySQL常见报错及处理系列(ERROR! The server quit without updating PID file)

本系列其他文章 【填坑向】MySQL常见报错及处理系列(Communications link failure & Access denied for user ‘root‘‘localhost‘)_AQin1012的博客-CSDN博客翻一下大致的意思就是默认会按照如下的顺序读取配置文件,我上面贴出的配置文…

⛳ Docker 安装 MySQL

🎍目录 ⛳ Docker 安装 MySQL🚜 一、搜索 mysql , 查看版本🎨 二、拉取mysql镜像👣 三、建立容器的挂载文件🧰 四、创建mysql配置文件,my.conf🏭 五、根据镜像产生容器🎁 六、远程连…

Java基础 数据结构一【栈、队列】

什么是数据结构 数据结构是计算机科学中的一个重要概念,用于组织和存储数据以便有效地进行访问、操作和管理。它涉及了如何在计算机内存中组织数据,以便于在不同操作中进行查找、插入、删除等操作 数据结构可以看作是一种数据的组织方式,不…

[NLP]深入理解 Megatron-LM

一. 导读 NVIDIA Megatron-LM 是一个基于 PyTorch 的分布式训练框架,用来训练基于Transformer的大型语言模型。Megatron-LM 综合应用了数据并行(Data Parallelism),张量并行(Tensor Parallelism)和流水线并…

docker-maven-plugin直接把镜像推到私有仓库

接着上篇 推送到本地docker 我们已经把服务做成镜像推到docker&#xff0c;也可以通过docker login 私有地址&#xff0c;去push。麻烦 直接上代码 1、pom改动 <properties><docker.registry>eco-registry.XXX.com</docker.repostory><docker.registry…

项目---日志系统

目录 项目系统开发环境核心技术日志系统介绍为什么需要日志系统? 日志系统框架设计日志系统模块划分代码实现通用工具实现日志等级模块实现日志消息模块实现格式化模块实现落地模块实现日志器模块同步日志器异步日志器缓冲区实现异步工作器实现 回归异步日志器模块建造者模式日…

KVM创建虚拟机可访问外网+可使用Xshell等工具连接

创建虚拟机时使用桥接网络模块即可&#xff0c;如下&#xff1a; 1、创建一个存储卷(虚拟机的磁盘) 2、创建虚拟机时选择网络 3、系统安装完成后配置固定IP地址 vi /etc/sysconfig/network-scripts/ifcfg-eth0ONBOOTyes BOOTPROTOstatic IPADDR16.32.15.60 GATEWAY16.32.15.2…

C++--两个数组的dp问题(2)

1.交错字符串 力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 给定三个字符串 s1、s2、s3&#xff0c;请判断 s3 能不能由 s1 和 s2 交织&#xff08;交错&#xff09; 组成。 两个字符串 s 和 t 交织 的定义与过程如下&#xff0c;其中每个字符串都…

SpringBoot实现文件上传和下载笔记分享(提供Gitee源码)

前言&#xff1a;这边汇总了一下目前SpringBoot项目当中常见文件上传和下载的功能&#xff0c;一共三种常见的下载方式和一种上传方式&#xff0c;特此做一个笔记分享。 目录 一、pom依赖 二、yml配置文件 三、文件下载 3.1、使用Spring框架提供的下载方式 3.2、通过IOUti…

NIO原理浅析(一)

IO简介 摘抄了下维基百科对IO的定义&#xff0c;Input/Output&#xff0c;输入和输出&#xff0c;通常指数据在存储器或者其他周边设备之间的输出和输入&#xff0c;输入是系统接收到信号或者数据&#xff0c;输出则是从系统发送的信号或数据。 Java IO 读写原理 Java中文件…

基于Elasticsearch + Fluentd + Kibana(EFK)搭建日志收集管理系统

目录 1、EFK简介 2、EFK框架 2.1、Fluentd系统架构 2.2、Elasticsearch系统架构 2.3、Kibana系统架构 3、Elasticsearch接口 4、EFK在虚拟机中安装步骤 4.1、安装elasticsearch 4.2、安装kibana 4.3、安装fluentd 4.4、进入kibana创建索引 5、Fluentd配置介绍 Elas…

Linux网络编程:多路I/O转接服务器(select poll epoll)

文章目录&#xff1a; 一&#xff1a;select 1.基础API select函数 思路分析 select优缺点 2.server.c 3.client.c 二&#xff1a;poll 1.基础API poll函数 poll优缺点 read函数返回值 突破1024 文件描述符限制 2.server.c 3.client.c 三&#xff1a;epoll …

Elasticsearch(十三)搜索---搜索匹配功能④--Constant Score查询、Function Score查询

一、前言 之前我们学习了布尔查询&#xff0c;知道了filter查询只在乎查询条件和文档的匹配程度&#xff0c;但不会根据匹配程度对文档进行打分&#xff0c;而对于must、should这两个布尔查询会对文档进行打分&#xff0c;那如果我想在查询的时候同时不去在乎文档的打分&#…