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销毁指定的事件控制块

坚持就有收获

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【教3妹学编程-算法题】统计强大整数的数目

2哥 : 3妹,今年过年收到压岁钱了没呢。 3妹:切,我都多大了啊,肯定没收了啊 2哥 : 俺也一样,不仅没收到,小侄子小外甥都得给,还倒贴好几千 3妹:哈哈哈哈,2叔叔&#xff0c…

QQ强制聊天,加好友。临时会话接口跳转单页源码

QQ互动增强工具:一键聊天、加好友与临时会话 🔥 全新体验,轻松连接 🔥 在数字社交时代,QQ仍然是我们与亲朋好友、工作伙伴沟通的重要桥梁。但有时候,复杂的设置和权限障碍让简单的“加个好友”或“说句话…

鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之LoadingProgress组件

鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之LoadingProgress组件 一、操作环境 操作系统: Windows 10 专业版、IDE:DevEco Studio 3.1、SDK:HarmonyOS 3.1 二、LoadingProgress组件 用于显示加载动效的组件。 子组件 无 接口 L…

HDFS架构 之 服务视图

1 、简介 为实现以上特性,HDFS包含的各个服务模块都是经过精心设计的,HDFS的服务视图如图。 HDFS的服务视图包含三大部分:核心服务、公共服务和拓展服务。 2、 核心服务 1)Namenode。HDFS系统采用中心化设计,即Master/Slave架构。这里的Namenode即是Master,主要作用是管…

代码随想录算法训练营第十四天|二叉树理论基础、递归遍历、迭代遍历、统一迭代

代码随想录算法训练营第十四天|二叉树理论基础、递归遍历、迭代遍历、统一迭代 ● 二叉树理论基础● 1.基础理论(1)概念(2)性质 ● 二叉树的分类(1)满二叉树(2)完全二叉树&#xff0…

麦肯锡问题解决流程-为希望提升水平的产品经理量身定制

您是否想知道世界上最成功的产品经理如何始终如一地提供不仅满足而且超出预期的解决方案?秘密可能就在于世界上最负盛名的咨询公司之一麦肯锡公司所磨练的方法论。本文深入探讨了麦肯锡的问题解决流程,该流程专为希望提升水平的产品经理量身定制。 01. 麦…

AI - 碰撞避免算法分析(VO/RVO)

VO/RVO VO和RVO的原理本身理解起来比较简单的,就是根据两个圆形的相对半径,相对速度,相对位置,求出碰撞区域,然后将速度移出碰撞区域。VO是双方都是当作对方速度不变的情况下,各自都将速度完整的移出了会碰…

01.数据结构篇-链表

1.找出两个链表的交点 160. Intersection of Two Linked Lists (Easy) Leetcode / 力扣 例如以下示例中 A 和 B 两个链表相交于 c1: A: a1 → a2↘c1 → c2 → c3↗ B: b1 → b2 → b3 但是不会出现以下相交的情况,因为每个节点只有一个…

pycharm—配置python解释器【2023最新版】

目录 1.前言1.打开设置2. 点击到project >> Python interpreter3. 选择环境4. 确定之后等待加载就行了 1.前言 嗨嗨,大家好啊,我是小曼~ 刚入门python的伙伴们,一开始也会很多的问题。今天来给大家分享一下python新手必须学会的技巧 &…

关闭Windows 10自动更新方法

1. 关闭WindowsUpdate服务 如果你想要完全关闭Win10的自动更新功能,你可以在Windows服务中的WindowsUpdate选项里进行禁用设置。按照以下步骤,你就能完成操作。 按下“WinR”键,来启动“运行”,在运行中输入“services.msc”&…

监督学习:从数据中挖掘模式的引导

目录 前言1 定义2 举例说明3 回归问题4 分类问题结论 前言 监督学习是机器学习领域中的一种重要方法,通过给模型提供带有标签的训练数据,使其能够学习输入与输出之间的关系。这种学习方式在各个领域都有广泛的应用,从垃圾邮件过滤到医学诊断…

MATLAB 1:基础知识

MATLAB中的数据类型主要包括数值类型、逻辑类型、字符串、函数句柄、结构体和单元数组类型。这六种基本的数据类型都是按照数组形式存储和操作的。 MATLAB中还有两种用于高级交叉编程的数据类型,分别是用户自定义的面向对象的用户类类型和Java类类型。 1.1.1数值类…