os_wait_event
所属模块:时间管理 | 类型:任务同步函数
函数简介
os_wait_event 用于让当前任务等待“信号或超时”两种条件之一,
是 HRTOS 中最常用的同步控制接口之一。
当任务调用该函数后,会进入阻塞状态,
直到接收到信号或等待时间到达,从而恢复执行。
函数原型
char os_wait_event(u8 ticks) reentrant;
参数说明
| 参数 |
说明 |
| ticks |
最大等待时间(单位:时间片) |
返回值
OS_WAIT_SIGNAL:收到信号返回
OS_WAIT_TIMEOUT:等待超时返回
源码实现
char os_wait_event(u8 ticks) reentrant
{
EA = 0;
OS_WAIT_DI[OS_YUNXING_BIANHAO] += ticks;
if(OS_WAIT_DI[OS_YUNXING_BIANHAO] < ticks)
OS_WAIT_DI[OS_YUNXING_BIANHAO] = 255;
OS_WAIT_INT = 1;
if(OS_WAIT_DI[OS_YUNXING_BIANHAO] == 0)
{
EA = 1;
return OS_WAIT_TIMEOUT;
}
OS_PEOCESS_OK[OS_YUNXING_BIANHAO] &= 0xFE;
os_switch();
if(OS_WAIT_DI[OS_YUNXING_BIANHAO] != 0)
{
OS_WAIT_DI[OS_YUNXING_BIANHAO] = 0;
EA = 1;
return OS_WAIT_SIGNAL;
}
EA = 1;
return OS_WAIT_TIMEOUT;
}
使用示例
void task1()
{
while(1)
{
if(os_wait_event(10) == OS_WAIT_SIGNAL)
{
// 收到信号处理
}
else
{
// 超时处理
}
}
}
注意事项
该函数会阻塞当前任务,直到满足条件才恢复执行,应避免在关键实时路径中滥用。