事件

事件对象是实现传统事件的内核对象。

概念

可以定义任意数量的事件对象(仅受可用RAM的限制)。每个事件对象都由其内存地址引用。一个或多个线程可能等待事件对象,直到所需的事件集传递到事件对象。当新事件传递到事件对象时,满足等待条件的所有线程将同时准备就绪。

事件对象具有以下关键属性:

  • 一个32位的值,用来跟踪传递给它的事件。

事件对象必须初始化才能使用。

事件可以通过一个线程或一个ISR来传递。在传递事件时,事件可以覆盖现有的事件集或以位方式添加到它们。当覆盖现有的事件集时,这被称为设置。当以一种按位排列的方式添加到它们中时,这被称为发布。发布和设置事件都有可能满足等待事件对象上的多个线程的匹配条件。已满足匹配条件的所有线程都将同时被激活。

线程可能会等待一个或多个事件。它们可以等待所有被请求的事件,也可以等待其中的任何一个事件。此外,发出等待请求的线程可以选择在等待之前重置事件对象跟踪的当前事件集。当多个线程在同一事件对象上等待时,必须注意此选项。

注意:

内核确实允许ISR查询事件对象,但是ISR不能尝试等待事件。

实现

定义事件对象

使用k_event类型的变量定义了一个事件对象。然后,必须通过调用k_event_init()来初始化它。

下面的代码定义了一个事件对象。

struct k_event my_event;k_event_init(&my_event);

Zephyr内核——内核服务(调度,中断和同步)——事件相关推荐

  1. Zephyr内核——内核服务(调度,中断和同步)——中断

    中断 中断服务例程(ISR)是响应硬件或软件中断而异步执行的函数.ISR通常会抢占当前线程的执行,从而允许以非常低的开销进行响应.只有在所有ISR工作都完成后,线程才会继续执行. 概念 可以定义任意数 ...

  2. Zephyr内核到1.5版本的改进

    Zephyr内核从1.0到1.5版本发生了很大改变,这些改变给开发人员带来了很大方便,具体如下: ①消除微内核和超微内核构建类型的分离 ②消除微内核应用程序中的MDEF ③更简单易用的内核API ④宽 ...

  3. Linux内核活动之中断1

    Linux内核活动之中断1 1. 中断介绍 1.1 中断类型 1.2 中断共享 1.3 硬件IRQ 1.4 处理中断 1.4.1 进入和退出任务 1.4.2 中断处理程序 1.5 数据结构 1.5.1 ...

  4. 秒杀多线程第六篇 经典线程同步 事件Event

    阅读本篇之前推荐阅读以下姊妹篇: <秒杀多线程第四篇 一个经典的多线程同步问题> <秒杀多线程第五篇 经典线程同步关键段CS> 上一篇中使用关键段来解决经典的多线程同步互斥问题 ...

  5. Linux内核深入理解中断和异常(1)

    Linux内核深入理解中断和异常(1) rtoax 2021年3月 1. 中断介绍 内核中第一个子系统是中断(interrupts). 1.1. 什么是中断? 我们已经在这本书的很多地方听到过 中断( ...

  6. 经典线程同步 事件Event

    Event 内核对象,实际上是解决线程同步问题的利器. 介绍下函数应用: 第一个 CreateEvent 函数功能:创建事件 函数原型: HANDLECreateEvent( LPSECURITY_A ...

  7. Windows多线程(四) 经典线程同步 事件Event

    第一个 CreateEvent 函数功能:创建事件 函数原型: HANDLECreateEvent( LPSECURITY_ATTRIBUTESlpEventAttributes, BOOLbManu ...

  8. Linux内核基础——Linux中断的概念

    一.什么是中断? 中断是指计算机运行过程中,出现某些意外情况需要主机干预时,中断源向CPU发送一个中断请求,CPU能进行中断响应去停止正在运行的程序并且保护现场数据,然后转入中断服务程序进行处理,处理 ...

  9. [.Net线程处理系列]专题五:线程同步——事件构造

    引言: 其实这部分内容应该是属于专题四,因为这篇也是讲关于线程同步的,但是由于考虑到用户的阅读习惯问题,因为文章太长了,很多人不是很愿意看包括我也是这样的,同时也有和我说可以把代码弄成折叠的,这样就不 ...

最新文章

  1. php的数组排序方法,PHP数组排序函数
  2. 各种函数调用约定及浮点数传参
  3. 有关Android的调试时候常用到的一些技巧
  4. bzoj 4237 稻草人
  5. 如何用php采集照片,使用PHP采集远程图片
  6. 多线程访问全局变量和局部变量
  7. java 绝对路径_java 获取绝对路径
  8. IE 7.0抛弃Win2000用户?(zz)
  9. js中sort()方法的用法,参数以及排序原理
  10. Android模拟器SDL_app:emulator.exe 解决方法
  11. 调整Excel的打印线
  12. 曼孚科技:7种常用的数据标注工具
  13. 1219 厘米到英寸的转换
  14. 服务器安装版u盘如何制作,U盘怎么安装原版Windows server 2016?
  15. 360无线wifi路由器连接到服务器,两个360路由器如何并连 两个无线路由器桥接设置方法...
  16. python 月初 月末
  17. Ubuntu 22.04 x86_64 OVF (sysin)
  18. 不可不知的量化因子模型选股策略
  19. oracle 2018 拉里,Oracle拉里,有新武器对付SAP和HANA
  20. CUDA在VS中的环境搭建

热门文章

  1. word文件不小心被删怎么恢复
  2. 为什么网红餐饮都做不长久?如何解决网红餐饮店所面临的问题?
  3. C语言 recv()函数、recvfrom()函数、recvmsg()函数
  4. endnote x9打开闪退_EndNote X9常用方法汇总
  5. 安装Jupyter Notebook并配置用于多用户的反向代理(Nginx)
  6. STM32——照相机
  7. Html —— 显示滚动条
  8. CH1:python概述
  9. python基础(一) P22-P53
  10. C语言定义起泡法函数对n个数,C语言程序设计第10讲.ppt