当前位置: 首页 > news >正文

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

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

在实时操作系统(如 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)作用:当一个任务调用函数等待事件组中的某些事件时,如果当前事件组的状态不满足该任务等待的条件,任务就会被加入到这个等待任务列表中,并进入阻塞状态。

相关文章:

  • 在Ubuntu内网环境中为Gogs配置HTTPS访问(通过Apache反向代理使用IP地址)
  • 使用NVM管理nodejs
  • Redis 在 Java 中的使用
  • C++假期练习
  • 批量改CAD图层颜色——CAD c#二次开发
  • Rocketmq2
  • 250207-MacOS修改Ollama模型下载及运行的路径
  • DHCP Snooping各种场景实验案例
  • 国外注册的商标如何在中国获得保护!
  • 深入理解矩阵乘积的导数:以线性回归损失函数为例
  • Lisp语言的安全协议
  • 计算机网络——VLAN虚拟局域网的概念与基本原理
  • 【百日精通JAVA | SQL篇 | 第四篇】约束
  • C++中的多态和模板
  • 3. go-zero中如何使用redis
  • C#“与AI的奇妙结合”
  • Immutable.js 完全指南:不可变数据的艺术与实践
  • 接口自动化学习五:mock工具使用
  • MyBatis查询语句专题、动态SQL、MyBatis的高级映射及延迟加载
  • Java线程生命周期探秘:六种状态的转换与核心机制
  • 四川省城乡住房与建设厅网站首页/推推蛙网站诊断
  • 如何做网站站内搜索/品牌营销的四大策略
  • 网站建设发展指引/天津百度网络推广
  • 国际网站建设/推广普通话海报
  • 金融公司网站方案/长沙网站制作策划
  • 郑州建设网站有哪些/如何推广网址链接