os_event_write

所属模块:通信机制 | 类型:事件广播写入函数

API Metadata

函数ID:os_event_write
模块:event
类型:event broadcast write
嵌套深度:2

函数简介

os_event_write 用于写入事件并触发所有等待该事件的任务唤醒, 是HRTOS事件机制中的广播级内核接口。

该函数通过 wait_mask 扫描所有等待任务,实现“一次事件,全局唤醒”机制。

函数原型

char os_event_write(u8 obj);

参数说明

参数 说明
obj 事件ID(0 ~ OS_RESOURCE_MAX-1)

返回值

1 - 写入成功
-1 - 参数错误

源码实现

/*------------------------------------------------------------------------ | FILE DESCRIPTION | ------------------------------------------------------------------------*/ /*------------------------------------------------------------------------ | - File name : event_write.c | - Author : 谭舒 | - Update date : 2026-09-19 | - Copyright(C) : 2026 HRTOS. All rights reserved. ------------------------------------------------------------------------*/ /*------------------------------------------------------------------------ | INCLUDES | ------------------------------------------------------------------------*/ #include"hrtos_internal.h" /*------------------------------------------------------------------------ | API FUNCTIONS | ------------------------------------------------------------------------*/ /** * @brief 触发指定事件,并唤醒所有等待该事件的任务。 * * @param[in] obj 事件资源槽位编号。 * * @return 操作结果。 * @retval 1 事件触发成功。 * @retval -1 事件资源槽位编号无效。 */ char os_event_write(u8 obj) { u8 i; if(obj >= OS_RESOURCE_MAX) { return -1; } EA = 0; OS_RES[obj].value = 1;//触发事件 /* ------------------------- * 唤醒等待该事件的全部任务 * ------------------------- */ if(OS_RES[obj].wait_cnt > 0) { for(i = 0; i < OS_PROCESS_MAX; i++) { if(OS_RES[obj].wait_mask & ((u16)1 << i)) { /* 唤醒任务 事件成立全局唤醒 */ wake_task(i, WAIT_SIGNAL); } } } EA = 1; return 1; } /*------------------------------------------------------------------------ | END OF FILE: event_write.c | ------------------------------------------------------------------------*/

使用示例

void event_trigger() { os_event_write(2); }

注意事项

该函数会唤醒所有等待该事件的任务,属于广播机制接口。 执行期间关闭中断以保证wait_mask一致性。

相关推荐