os_event_write
所属模块:通信机制 | 类型:事件广播写入函数
函数简介
os_event_write 用于写入事件并触发所有等待该事件的任务唤醒,
是HRTOS事件机制中的广播级内核接口。
该函数通过 wait_mask 扫描所有等待任务,实现“一次事件,全局唤醒”机制。
函数原型
char os_event_write(u8 obj);
参数说明
| 参数 |
说明 |
| obj |
事件ID(0 ~ OS_RESOURCE_MAX-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一致性。