核心接口
os_event_init(u8 id)
os_event_delete(u8 id)
os_event_query(u8 id)
os_event_write(u8 id)
os_event_wait(u8 id, u16 tick)
实现机制
事件使用 OS_RES[obj].value 作为状态标志,wait_mask 记录等待任务位图,wait_cnt 统计等待数量。
写事件时关闭中断 EA,设置 value=1,并扫描 wait_mask 唤醒任务(wake_task)。
等待时若 value 已置位则立即返回,否则进入 os_wait(WAIT_EVENT) 阻塞。
事件属于“状态保持型同步”,不会自动清除,需由任务显式 reset(delete)。
执行流程
等待流程:check → return / block → wait_queue
触发流程:EA off → set value → scan wait_mask → wake_task → EA on
关键结构(内部)
OS_RES[obj].value // 事件状态
OS_RES[obj].wait_mask // 等待任务位图
OS_RES[obj].wait_cnt // 等待计数
特性说明
• 不传递数据,仅表示状态
• 支持超时等待
• 支持多任务广播唤醒
• 中断/任务均可触发
• 事件保持直到显式清除
典型用途
外设完成通知、中断同步、状态机触发、多任务广播信号。