RT_Thread应用11—事件1

本文深入探讨了RT-Thread操作系统中的事件机制,包括事件的基本概念、应用场景及运作机制。事件作为线程间通信的重要手段,用于实现同步,不涉及数据传输。文章详细解释了如何使用事件集合进行线程间同步,以及不同线程如何根据事件集合中的状态变化进行响应。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第二十一 事件(第一部分)

一、基本概念

  • 事件是一种实现线程间通信的机制,主要用于实现线程间的同步,但事件通信只能是事件类型的通信,无数据传输。其可以实现一对多,多对多的同步
  • 事件集合用 32 位无符号整型变量来表示,每一位代表一个事件,线程通过“逻辑与”或“逻辑或”与一个或多个事件建立关联,形成一个事件集。
  • 在这里插入图片描述
  • 线程可以通过创建事件来实现事件的触发和等待操作。
    RT-Thread 的事件仅用于同步,不提供数据传输功能
    在这里插入图片描述
    在这里插入图片描述

当线程等待事件同步时,可以通过 32 个事件标志和这个事件信息标记来判断当前接收的事件是否满足同步条件。

二、事件应用场景

RT-Thread 的事件用于事件类型的通讯,无数据传输。
——可用事件来做标志位,判断某些事件是否发生了,然后根据结果做处理
在这里插入图片描述
例子:
在某些场合,可能需要多个时间发生了才能进行下一步操作,比如一些危险机器的启动,需要检查各项指标,当指标不达标的时候,无法启动,但是检查各个指标的时候,不能一下子检测完毕啊,所以,需要事件来做统一的等待,当所有的事件都完成了,那么机器才允许启动。
在这里插入图片描述

三、事件运作机制

在这里插入图片描述
用户可以自定义通过传入参数选择读取模式 option,自行选择是等待所有感兴趣的事件还是等待感兴趣的任意一个事件。 在这里插入图片描述
在这里插入图片描述
**事件不与线程相关联,事件相互独立,**一个 32 位的变量(事件集合 set),用于标识该线程发生的事件类型,其中每一位表示一种事件类型(0 表示该事件类型未发生、1 表示该事件类型已经发生),一共 32 种事件类型
在这里插入图片描述
事件唤醒机制,当线程因为等待某个或者多个事件发生而进入阻塞态,当事件发生的时候会被唤醒
在这里插入图片描述

  • 线程 1 对事件 3 或事件 5 感兴趣(逻辑或 RT_EVENT_FLAG_OR),当发生其中的某一个事件都会被唤醒,并且执行相应操作。

  • 线程 2 对事件 3 与事件 5 感兴趣(逻辑与RT_EVENT_FLAG_AND),当且仅当事件 3 与事件 5 都发生的时候,线程 2 才会被唤醒,如果只有一个其中一个事件发生,那么线程还是会继续等待事件发生。

  • 如果接在收事件函数中 option 设置了清除事件位,那么当线程唤醒后将把事件 3 和事件 5 的事件标志清零,否则事件标志将依然存在。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值