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 { // 超时处理 } } }

注意事项

该函数会阻塞当前任务,直到满足条件才恢复执行,应避免在关键实时路径中滥用。

相关推荐