HCIA-HarmonyOS设备开发认证V2.0-轻量系统内核基础-事件event

在这里插入图片描述

一、事件基本概念

事件是一种实现任务间通信的机制,可用于实现任务间的同步,但事件通信只能是事件类型的通信,无数据传输。一个任务可以等待多个事件的发生:可以是任意一个事件发生时唤醒任务进行事件处理;也可以是几个事件都发生后才唤醒任务进行事件处理。事件集合用 32 位无符号整型变量来表示,每一位代表一个事件。

事件的第 25 位为保留位,不可以进行位设置。

请添加图片描述

事件(Event)是一种任务间的通信机制,可用于任务间的同步操作。事件的特点是:

  • 任务间的事件同步,可以一对多,也可以多对多。一对多表示一个任务可以等待多个事件,多对多表示多个任务可以等待多个事件。但是一次写事件最多触发一个任务从阻塞中醒来。
  • 事件读超时机制。
  • 只做任务间同步,不传输具体数据。

提供了事件初始化、事件读写、事件清零、事件销毁等接口。

二、事件运行机制

事件初始化:会创建一个事件控制块,该控制块维护一个已处理的事件集合,以及等待特定事件的任务链表。
写事件:会向事件控制块写入指定的事件,事件控制块更新事件集合,并遍历任务链表,根据任务等待具体条件满足情况决定是否唤醒相关任务。

读事件:如果读取的事件已存在时,会直接同步返回。其他情况会根据超时时间以及事件触发情况,来决定返回时机:等待的事件条件在超时时间耗尽之前到达,阻塞任务会被直接唤醒,否则超时时间耗尽该任务才会被唤醒。

读事件条件满足与否取决于入参 eventMask 和 mode,eventMask 即需要关注的事件类型掩码。mode 是具体处理方式,在 los_event.h 中定义了以下三种情况:

  • 所有事件(LOS_WAITMODE_AND):读取掩码中所有事件类型,只有读取的所有事件类型都发生了,才能读取成功。
  • 任一事件(LOS_WAITMODE_OR):读取掩码中任一事件类型,读取的事件中任意一种事件类型发生了,就可以读取成功。
  • 清除事件(LOS_WAITMODE_CLR):LOS_WAITMODE_AND|LOS_WAITMODE_CLR 或LOS_WAITMODE_OR|LOS_WAITMODE_CLR 时表示读取成功后,对应事件类型位会自动清除。

事件清零:根据指定掩码,去对事件控制块的事件集合进行清零操作。当掩码为 0 时,表示将事件集合全部清零。当掩码为 0xffff 时,表示不清除任何事件,保持事件集合原状。

事件销毁:销毁指定的事件控制块。

请添加图片描述

三、事件开发流程

  • 初始化事件控制块
  • 阻塞读事件控制块
  • 写入相关事件
  • 阻塞任务被唤醒,读取事件并检查是否满足要求
  • 处理事件控制块
  • 事件控制块销毁

四、事件使用说明

  • 进行事件读写操作时,事件的第 25 位为保留位,不可以进行位设置。
  • 对同一事件反复写入,算作一次写入。
  • 执行 LOS_EventRead()时,其中的事件类型掩码等于等待的所有事件类型掩码按位与(LOS_WAITMODE_AND)或是按位或(LOS_WAITMODE_OR)的结果。

五、事件接口

功能类别接口函数描述
初始化事件LOS_EventInit初始化一个事件控制块
读/写事件LOS_EventRead读取指定事件类型,超时时间为相对时间:单位为Tick
LOS_EventWrite写指定的事件类型
清除事件LOS_EventClear清除指定的事件类型
校验事件掩码LOS_EventPoll根据用户传入的事件ID、事件掩码及读取模式,返回用户传入的事件是否符合预期
销毁事件LOS_EventDestroy销毁指定的事件控制块

坚持就有收获

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

攻下一城

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值