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

事件

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

概念

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

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

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

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

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

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

注意:

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

实现

定义事件对象

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

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

struct k_event my_event;

k_event_init(&my_event);
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值