freeRTOS事件标志组(1-16)

news2025/1/23 11:58:32

def:事件标志组简介

事件标志位:用一个为来表示事件是否发生

事件标志组是事件标志位的集合可以简单的理解事件标志组,就是一个整数

事件标志组的特点:

  • 1:它的每一个位表示一个事件(高8位不算)

  • 2:每一个事件的含义,由用户自己决定,如:bit0表示按键是否按下,bit表示是否接收到消息......(这些位的值为1:表示事件发生了,值为0:表示事件未发生)

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

  • 4:可以等待某一位成立,或者诸多位同事成立

事件标志组简介

一个事件组就包含了一个EventBits_t 数据类型的变量,变量类型EventBits_t的定义如下所示。

事件标志组简介(了解)

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

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

事件标志组API函数简介

创建标志组

使用动态的方式创建事件标志组

使用事件组之前,要先创建,得到一个句柄;使用事件组时,要使用句柄来表明使用哪个事件组。有两种创建方法:动态分配内存、静态分配内存。函数原型如下:

EventGroupHandle_t xEventGroupCreate ( void ) ;

返回值描述
NULL事件标志组创建失败
其他值事件标志组创建成功,返回句柄

创建示例:

清除事件标志位API函数

EventBits_t xEventGroupClearBits( EventGroupHandle_t xEventGroup,const EventBits_t  uxBitsToClear);

形参描述
xEventGroup待操作的事件标志组句柄
uxBitsToSet待清零的事件标志位
返回值描述
整数清零事件标志位之前事件组中事件标志位的值

设置事件标志位API函数

EventBits_t xEventGroupSetBits( EventGroupHandle_t xEventGroup, const EventBits_t

uxBitsToSet)

形参描述
xEventGroup待操作的事件标志组句柄
uxBitsToSet待设置的事件标志位
返回值描述
整数事件组中的事件标志位值

可以设置事件组的某个位、某些位,使用的函数有2个:

  • 在任务中使用 xEventGroupSetBits()

  • 在ISR中使用 xEventGroupSetBitsFromISR()

有一个或多个任务在等待事件,如果这些事件符合这些任务的期望,那么任务还会被唤醒。函数原型如下:

注:

值得注意的是,ISR中的函数,比如队列函数 xQueueSendToBackFromISR、信号量函数xSemaphoreGiveFromISR,它们会唤醒某个任务,最多只会唤醒1个任务。

但是设置事件组时,有可能导致多个任务被唤醒,这会带来很大的不确定性。

所以xEventGroupSetBitsFromISR函数不是直接去设置事件组,而是给一个FreeRTOS后台任务(daemon task)发送队列数据,由这个任务来设置事件组。

如果后台任务的优先级比当前被中断的任务优先级高, xEventGroupSetBitsFromISR会设置 *pxHigherPriorityTaskWoken为pdTRUE。

如果daemon task成功地把队列数据发送给了后台任务,那么 xEventGroupSetBitsFromISR的返回值就是pdPASS。

等待事件标志位的API函数

形参描述
xEventGroup等待事件标志组句柄
uxBitsToWaitFor等待事件标志位,可以用逻辑或等待多个事件标志位
xClearOnExit

成功等待事件标志位后,清除事件组中对应的事件标志位,

pdTRUE:  清除uxBitsToWaitFor指定位

pdFALSE: 不清除

xWaitForAllBits

等待uxBitsToWaitFor中的所有事件标志位(逻辑与)

pdTRUE:等待的位,全部为1

pdFALSE:等待的位,某个为1

xTicksToWait等待的阻塞时间
返回值描述
等待事件标志位值等待事件标志位成功,返回等待到的事件标志位
其他值等待事件标志位失败,返回事件组中的事件标志位

特点:可以等待某一位也可以等待多位,等到期望事件后,还可以清除某些位

同步函数

例子:

Task 1 : 做饭

Task 2 : 做菜

Task1做好自己的事情之后, 需要等到菜也做好后,大家再一起吃饭

事件标志组API函数实验

-----------------------------后续编写代码验证--------------------------------------

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

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

相关文章

分布式与一致性协议之Raft算法与一致哈希算法(一)

Raft算法 Raft与一致性 有很多人把Raft算法当成一致性算法,其实它不是一致性算法而是共识算法,是一个Multi-Paxos算法,实现的是如何就一系列值达成共识。并且,Raft算法能容忍少数节点的故障。虽然Raft算法能实现强一致性&#x…

打印机-STM32版本 硬件部分

最终PCB EDA工程: 一、确定芯片型号 根据项目需求,梳理需要用到的功能, 电量检测:ADC 按键:IO input外部中断 LED:IO output 温度检测:ADC 电机控制:IO output 打印通讯:SPI …

HarmaonyOS鸿蒙应用科普课

一、什么是鸿蒙OS? 1.概念: 先给大家讲讲今天讲课的主题,鸿蒙OS是什么?鸿蒙系统大家都知道,就是一个操作系统,我们未来是为的成为鸿蒙程序员。所以我们不要将鸿蒙os完全等同于手机操作系统,太…

笔记:编写程序,绘制一个展示支付宝月账单报告的饼图,

文章目录 前言一、饼图是什么?二、分析题目三、编写代码总结 前言 编写程序,绘制一个展示支付宝月账单报告的饼图,实现过程如下: (1) 导入 matplotlib.pyplot 模块; (2)…

前端业务开发中使用原生js和elementui两种方式实现头像裁切上传的功能

日常业务开发中,无论是后台管理系统还是前台界面,都会遇到图片裁剪的业务需求,选择合适的尺寸或者图片的关键部分,满足我们的功能需求!! 效果预览 效果一: 效果二: 实现过程 1.原生js实现方…

全栈开发之路——前端篇(2)文件、组件与setup引入

全栈开发一条龙——前端篇 第一篇:框架确定、ide设置与项目创建 本文系该系列第二篇,主要将介绍各个文件的意义、组件结构与导入以及setup的引入。 目录 一、src外文件介绍.gitignore为git忽略文件env.d.ts用于识别其他文件index.htmljson文件vite.confi…

七、Google Protobuf

这里写自定义目录标题 一、编码和解码二、Netty本身的编码解码机制和存在的问三、Protobuf四、Protobuf示例1五、ProtoBuffer传输多种数据类型 一、编码和解码 二、Netty本身的编码解码机制和存在的问 netty提供的编码器 netty提供的解码器 存在的问题 无法跨语言序列化后…

【C语言】动态内存分配(一)

目录 1.为什么要有动态内存分配 2.malloc和free 2.1malloc 2.2free 1.为什么要有动态内存分配 我们已经掌握的内存开辟方式有: 但是上述的开辟空间的方式有两个特点: ⭐空间开辟大小是固定的。 ⭐数组在申明的时候,必须指定数组的长度,数组空间一旦…

大模型实体化:个人智能体为AI PC注入灵魂

从Alpha GO到Chat GPT,从DALL-E到Sora,AI时代的演进正行驶在快车道,人工智能正受到有史以来最高的关注。人们在生怕被快速变革的AI时代抛弃的同时,也不禁疑惑,AI浪潮的下一步在哪里? 大模型实体化&#xff…

java-函数式编程-函数对象

定义 什么是合格的函数?无论多少次执行函数,只要输入一样,输出就不会改变 对象方法的简写 其实在类中,我们很多参数中都有一个this,被隐藏传入了 函数也可以作为对象传递,lambda就是很好的例子 函数式接口中…

jenkins汉化不完全问题解决

jenkins安装完Localization:Chinese(Simplified)中文语言包后,发现是出现汉化不完全或者部分汉化的情况,如下图: 解决方法: 启动命令中指定语言 -Duser.languageen_US.UTF-8 或者 -Duser.languageC.UTF-8原因分析:安…

第十五届蓝桥杯Java软件开发大学B组自我经验小结

自我介绍 23届大一 双非 计院科班 软件工程 江苏人在吉林上大学 Java蒟蒻 在学校的宣传下 有幸参加了第十五届蓝桥杯Java大学b组省赛 蓝桥杯说明 就是一个算法比赛吧 考试时间9.00到1.00 四小时 带准考证和身份证和笔 草稿纸会发 赛制是IOC就是不会给任何反馈 就是你…

基于粒子滤波器的电池剩余使用寿命计算matlab仿真

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 4.1 粒子滤波器基础 4.2 电池剩余使用寿命建模与预测 4.3 粒子滤波器在电池寿命预测中的应用 5.完整工程文件 1.课题概述 基于粒子滤波器的电池剩余使用寿命计算。根据已知的数据,预测未来…

Python绘制的好看统计图

代码 sx [Accent, Accent_r, Blues, Blues_r, BrBG, BrBG_r, BuGn, BuGn_r, BuPu, BuPu_r, CMRmap, CMRmap_r, Dark2, Dark2_r, GnBu, GnBu_r, Greens, Greens_r, Greys, Greys_r, OrRd, OrRd_r, Oranges, Oranges_r, PRGn, PRGn_r, Paired, Paired_r, Pastel1, Pastel1_r, P…

数据结构(C):玩转顺序表

🍺0.前言 言C之言,聊C之识,以C会友,共向远方。各位博友的各位你们好啊,这里是持续分享数据结构知识的小赵同学,今天要分享的数据结构知识是顺序表,在这一章,小赵将会向大家展开聊聊顺…

PotatoPie 4.0 实验教程(31) —— FPGA实现摄像头图像高斯滤波

什么是高斯滤波 高斯滤波是一种常见的图像处理技术,用于去除图像中的噪声和平滑图像。它的原理基于统计学中的高斯分布(也称为正态分布)。 在高斯滤波中,一个二维的高斯核函数被用来对图像中的每个像素进行加权平均。这个高斯核…

基于Java+SpringBoot+Mybaties-plus+Vue+elememt+hadoop + redis 医院就诊系统 设计与实现

一.项目介绍 前端:患者注册 、登录、查看首页、医生排班、药品信息、预约挂号、就诊记录、电子病历、处方开药、我的收藏 后端分为: 医生登录:查看当前排班信息、查看患者的挂号情况、设置患者就诊记录、电子病历、给患者开药和个人信息维护 …

LeetCode 11—— 盛最多水的容器

阅读目录 1. 题目2. 解题思路一3. 代码实现一4. 解题思路二5. 代码实现二 1. 题目 2. 解题思路一 暴力法,遍历所有可能的垂线对 ( i , j ) (i, j) (i,j),求取最大面积: a r e a m i n ( h [ i ] , h [ j ] ) ∗ ( j − i ) area min(h[i]…

when to create a ViewRootImpl

when to create a ViewRootImpl when method setView is called: when method dispatchDetachedFromWindow is called:

2024年【起重机械安全管理】考试内容及起重机械安全管理操作证考试

题库来源:安全生产模拟考试一点通公众号小程序 起重机械安全管理考试内容根据新起重机械安全管理考试大纲要求,安全生产模拟考试一点通将起重机械安全管理模拟考试试题进行汇编,组成一套起重机械安全管理全真模拟考试试题,学员可…