freertos韦东山---事件组以及实验

news2025/4/9 19:24:28

事件组的原理是什么,有哪些优点,为啥要创造出这个概念

在实时操作系统(如 FreeRTOS)中,事件组是一种用于任务间同步和通信的机制,它的原理、优点及存在意义如下:

事件组原理

  1. 数据结构:事件组本质上是一个无符号整数,每一位(bit)代表一个不同的事件。例如,在一个 32 位的事件组中,就可以表示 32 个不同的事件。
  2. 事件设置与等待
    • 设置事件:任务可以通过特定的函数调用设置事件组中的某些位,以表示相应事件发生。比如任务 A 完成了某个特定操作,就可以设置事件组中的第 3 位,表示 “操作 3 完成” 事件发生。
    • 等待事件:其他任务可以等待事件组中某些特定事件的组合。任务在等待时,可以指定等待的事件位组合方式,例如 “等待事件 1 和事件 3 同时发生” 或者 “等待事件 2 或事件 4 其中之一发生”。当事件组中的实际事件状态满足等待任务所设定的条件时,等待任务就会从阻塞状态变为就绪状态,继续执行。

事件组优点

  1. 灵活的同步方式:与信号量和互斥量相比,事件组提供了更灵活的同步机制。信号量通常用于表示资源数量或简单的任务同步,互斥量主要用于互斥访问共享资源。而事件组可以让任务等待多个不同事件的任意组合,满足复杂的同步需求。例如,一个任务可能需要等待传感器数据采集完成(事件 1)、数据校验通过(事件 2)以及数据处理准备就绪(事件 3)这三个事件都发生后,才开始执行下一步操作,事件组就能轻松实现这种同步。
  2. 高效的通信机制:事件组可用于任务间传递简单信息。不同任务可以通过设置和等待事件组中的不同位来进行通信,无需像消息队列那样传递复杂的数据结构。例如,任务 A 完成某个阶段的工作后设置事件组中的特定位,任务 B 等待该位被设置后,就知道任务 A 的工作已完成,从而可以开展后续工作,这种通信方式简洁高效。
  3. 减少资源占用:相比于使用多个信号量来实现类似功能,事件组使用单个无符号整数来管理多个事件,占用更少的内存资源。例如,若要同步 5 个不同事件,使用 5 个信号量会占用较多内存,而一个事件组只需一个无符号整数(通常 4 字节,32 位系统下)即可实现同样功能,在资源有限的嵌入式系统中这一点尤为重要。

创造事件组概念的原因

  1. 满足复杂同步需求:在实际的嵌入式系统开发中,任务之间的同步关系往往很复杂,单个信号量或互斥量无法满足所有同步场景。事件组能够处理多个事件的组合同步,为开发者提供了更强大的同步工具,使系统能够更精确地控制任务执行顺序。
  2. 优化资源利用:嵌入式系统资源通常有限,事件组以紧凑的方式管理多个事件,减少了内存等资源的占用。这对于资源紧张的微控制器来说非常关键,能在有限资源下实现更复杂的任务同步与通信功能。
  3. 提高开发效率:事件组提供了一种直观且易于理解的任务同步和通信方式。开发者可以通过简单的位操作来设置和等待事件,相比于使用多个不同的同步机制,代码逻辑更加清晰,开发和维护成本更低,从而提高了整个项目的开发效率。




    事件组由什么构成
    |事件组句柄(Event Group Handle)

    事件标志位(Event Flags)作用:事件组本质上是一个无符号整数,其中每一位(bit)代表一个不同的事件,这些位就是事件标志位。
    等待事件的任务列表(List of Waiting Tasks)作用:当一个任务调用函数等待事件组中的某些事件时,如果当前事件组的状态不满足该任务等待的条件,任务就会被加入到这个等待任务列表中,并进入阻塞状态。

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

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

相关文章

架构师面试(二十六):系统拆分

问题 今天我们聊电商系统实际业务场景的问题,考查对业务系统问题的分析能力、解决问题的能力和对系统长期发展的整体规划能力。 一电商平台在早期阶段业务发展迅速,DAU在 10W;整个电商系统按水平分层架构进行设计,包括【入口网关…

Java中的同步和异步

一、前言 在Java中,同步(Synchronous)和异步(Asynchronous)是两种不同的任务处理模式。核心区别在任务执行的顺序控制和线程阻塞行为。 二、同步(Synchronous) 定义:任务按顺序执行…

在 Ubuntu24.04 LTS 上 Docker Compose 部署基于 Dify 重构二开的开源项目 Dify-Plus

一、安装环境信息说明 硬件资源(GB 和 GiB 的主要区别在于它们的换算基数不同,GB 使用十进制,GiB 使用二进制,导致相同数值下 GiB 表示的容量略大于 GB;换算关系:1 GiB ≈ 1.07374 GB ;1 GB ≈ …

NO.64十六届蓝桥杯备战|基础算法-简单贪心|货仓选址|最大子段和|纪念品分组|排座椅|矩阵消除(C++)

贪⼼算法是两极分化很严重的算法。简单的问题会让你觉得理所应当,难⼀点的问题会让你怀疑⼈⽣ 什么是贪⼼算法? 贪⼼算法,或者说是贪⼼策略:企图⽤局部最优找出全局最优。 把解决问题的过程分成若⼲步;解决每⼀步时…

瑞萨RA4M2使用心得-KEIL5的第一次编译

目录 前言 环境: 开发板:RA-Eco-RA4M2-100PIN-V1.0 IDE:keil5.35 一、软件的下载 编辑瑞萨的芯片,除了keil5 外还需要一个软件:RASC 路径:Releases renesas/fsp (github.com) 向下找到: …

数据分析-Excel-学习笔记

Day1 复现报表聚合函数:日期联动快速定位区域SUMIF函数SUMIFS函数环比、同比计算IFERROR函数混合引用单元格格式总结汇报 拿到一个Excel表格,首先要看这个表格个构成(包含了哪些数据),几行几列,每一列的名称…

整车CAN网络和CANoe

车载网络中主要包含有Can网络,Lin网络,FlexRay,Most,以太网。 500kbps:500波特率,表示的数据传输的速度。表示的是最大的网速传输速度。也就是每秒 500kb BodyCan车身Can InfoCan娱乐信息Can 车身CAN主要连接的是ESB电动安全带 ADB自适应远光灯等 PTCan动力Can 底盘Can

ChatGPT 的新图像生成器非常擅长伪造收据

本月,ChatGPT 推出了一种新的图像生成器,作为其 4o 模型的一部分,该模型在生成图像内的文本方面做得更好。 人们已经在利用它来生成假的餐厅收据,这可能会为欺诈者使用的已经很广泛的 AI 深度伪造工具包添加另一种工具。 多产的…

JS页面尺寸事件

元素位置 在这里插入图片描述 父元素带有定位时输出相对于父亲元素的距离值

网络协议之基础介绍

写在前面 本文看下网络协议相关基础内容。 1:为什么要有网络协议 为了实现世界各地的不同主机的互联互通。 2:协议的三要素 协议存在的目的就是立规矩,无规矩不成方圆嘛!但是这个规矩也不是想怎么立就怎么立的,也…

初识数据结构——Java集合框架解析:List与ArrayList的完美结合

📚 Java集合框架解析:List与ArrayList的完美结合 🌟 前言:为什么我们需要List和ArrayList? 在日常开发中,我们经常需要处理一组数据。想象一下,如果你要管理一个班级的学生名单,或…

uniapp微信小程序引入vant组件库

1、首先要有uniapp项目,根据vant官方文档使用yarn或npm安装依赖: 1、 yarn init 或 npm init2、 # 通过 npm 安装npm i vant/weapp -S --production# 通过 yarn 安装yarn add vant/weapp --production# 安装 0.x 版本npm i vant-weapp -S --production …

贪心进阶学习笔记

反悔贪心 贪心是指直接选择局部最优解,不需要考虑之后的影响。 而反悔贪心是在贪心上面加了一个“反悔”的操作,于是又可以撤销之前的“鲁莽行动”,让整个的选择稍微变得“理智一些”。 于是,我个人理解,反悔贪心是…

Java 大视界 -- Java 大数据在航天遥测数据分析中的技术突破与应用(177)

💖亲爱的朋友们,热烈欢迎来到 青云交的博客!能与诸位在此相逢,我倍感荣幸。在这飞速更迭的时代,我们都渴望一方心灵净土,而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识,也…

架构师面试(二十七):单链表

问题 今天的问题对于架构师来说会相对容易许多。今天出一个【数据结构与算法】相关的题目,醒醒脑。 给一张【单链表】,该单链表有100个节点元素(当然,事先我们是不知道100这个数目的),要获取倒数第8个元素…

从扩展黎曼泽塔函数构造物质和时空的结构-15

回来考虑泽塔函数, 我们知道, 也就是在平面直角坐标系上反正切函数在x上的变化率,那么不难看出, 就是在s维空间上的“广义”反正切函数在单位p上的变化率,而泽塔函数,就是这些变化率的全乘积, 因…

01背包问题详解 具体样例模拟版

01背包 有 N 件物品和一个容量是 V 的背包。每件物品只能使用一次。 第 i 件物品的体积是 v i v_i vi​,价值是 w i w_i wi​。 求解将哪些物品装入背包,可使这些物品的总体积不超过背包容量,且总价值最大。 输出最大价值。 输入格式 …

网络初识 - Java

网络发展史: 单机时代(独立模式) -> 局域网时代 -> 广域网时代 -> 移动互联网时代 网络互联:将多台计算机链接再一起,完成数据共享。 数据共享的本质是网络数据传输,即计算机之间通过网络来传输数…

每日一题(小白)回溯篇4

深度优先搜索题:找到最长的路径,计算这样的路径有多少条(使用回溯) 分析题意可以得知,每次向前后左右走一步,直至走完16步就算一条走通路径。要求条件是不能超出4*4的范围,不能重复之前的路径。…

k8s进阶之路:本地集群环境搭建

概述 文章将带领大家搭建一个 master 节点,两个 node 节点的 k8s 集群,容器基于 docker,k8s 版本 v1.32。 一、系统安装 安装之前请大家使用虚拟机将 ubuntu24.04 系统安装完毕,我是基于 mac m1 的系统进行安装的,所…