os_event_wait
所属模块:通信机制 | 类型:事件阻塞等待函数
函数简介
os_event_wait 用于等待指定事件被触发,
支持超时机制,是任务进入阻塞状态的核心同步接口。
如果事件已触发,则立即返回;否则任务进入等待状态,
由调度器在事件到达或超时后唤醒。
函数原型
char os_event_wait(u8 obj, u16 tick);
参数说明
| 参数 |
说明 |
| obj |
事件ID(0 ~ OS_RESOURCE_MAX-1) |
| tick |
超时时间(系统节拍) |
返回值
1 - 事件已触发(立即返回)
0 / -1 - 等待失败或超时(取决于os_wait返回值)
源码实现
#include "hrtos_internal.h"
char os_event_wait(u8 obj, u16 tick)
{
if(obj >= OS_RESOURCE_MAX)
{
return -1;
}
EA = 0;
/* 事件已触发:快速路径返回 */
if(OS_RES[obj].value)
{
return 1;
}
EA = 1;
/* 进入阻塞等待 */
return os_wait(WAIT_EVENT, obj, tick);
}
使用示例
void task()
{
if(os_event_wait(2, 100) == 1)
{
// 事件触发处理
}
}
注意事项
该函数具有“快速路径优化”,事件已触发时不会进入调度器。
未触发时将进入阻塞状态,由内核统一调度唤醒。