os_event.h 源码
2026/7/20大约 2 分钟源码参考内核事件头文件
os_event.h — 事件标志接口头文件
源文件路径: kernel/include/os_event.h
引用章节: 4.3.3 事件
完整源码
/**
***********************************************************************************************************************
* Copyright (c) 2020, China Mobile Communications Group Co.,Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
* specific language governing permissions and limitations under the License.
*
* @file os_event.h
*
* @brief Header file for event interface.
*
* @revision
* Date Author Notes
* 2020-12-28 OneOS Team First Version
***********************************************************************************************************************
*/
#ifndef __OS_EVENT_H__
#define __OS_EVENT_H__
#include <oneos_config.h>
#include <os_types.h>
#include <os_list.h>
#include <os_spinlock.h>
#include <os_dummy.h>
#ifdef __cplusplus
extern "C" {
#endif
#ifdef OS_USING_EVENT
#define OS_EVENT_WAKE_TYPE_PRIO 0x55 /* 按优先级唤醒 */
#define OS_EVENT_WAKE_TYPE_FIFO 0xAA /* 按FIFO顺序唤醒 */
#define OS_EVENT_OPTION_AND 0x00000001U /* 逻辑与:所有感兴趣的事件都发生 */
#define OS_EVENT_OPTION_OR 0x00000002U /* 逻辑或:任一感兴趣的事件发生 */
#define OS_EVENT_OPTION_CLEAR 0x00000004U /* 接收后自动清除事件位 */
#define OS_EVENT_OPTION_MASK 0x00000007U /* 选项掩码 */
typedef struct dummy_event os_event_dummy_t;
typedef os_event_dummy_t *os_event_id;
/* 静态定义事件控制块 */
#define OS_EVENT_DEFINE(name) os_event_dummy_t name
extern os_event_id os_event_create(os_event_dummy_t *event_cb, const char *name);
extern os_err_t os_event_destroy(os_event_id event_id);
/* 发送事件(设置事件位) */
extern os_err_t os_event_send(os_event_id event_id, uint32_t set);
/* 接收事件(等待事件位) */
extern os_err_t
os_event_recv(os_event_id event_id, uint32_t interested_set, uint32_t option,
os_tick_t timeout, uint32_t *recved_set);
extern os_err_t os_event_clear(os_event_id event_id, uint32_t interested_clear);
extern os_err_t os_event_get(os_event_id event_id, uint32_t *set);
extern os_err_t os_event_set_wake_type(os_event_id event_id, uint8_t wake_type);
/* 同步发送+接收(原子操作:发完后立即等待) */
extern os_err_t
os_event_sync(os_event_id event_id, uint32_t set, uint32_t interested_set,
os_tick_t timeout, uint32_t *recved_set);
#endif /* OS_USING_EVENT */
#ifdef __cplusplus
}
#endif
#endif /* __OS_EVENT_H__ */关键说明
| 宏/API | 功能 | 说明 |
|---|---|---|
OS_EVENT_OPTION_AND | 逻辑与 | 所有感兴趣位都置位才唤醒 |
OS_EVENT_OPTION_OR | 逻辑或 | 任一感兴趣位置位就唤醒 |
OS_EVENT_OPTION_CLEAR | 自动清除 | 接收后自动清零事件位 |
os_event_send | 发送事件 | 设置指定事件位,唤醒满足条件的等待任务 |
os_event_sync | 同步事件 | 原子操作:先设置事件,再等待事件(用于任务间握手) |