一、事件概述
同步操作可以使用信号量来完成,但是使用信号量来同步的话任务只能与单个的事件或任务进行同步。对于任务要与多个事件或任务进行同步的情况,信号量无法完成同步。OneOS 为此提供了事件标志组来解决上述问题。
1.1、事件简介
事件也是任务间同步的一种机制,如果任务需要等待某种特定的条件才能继续往下执行,就可以用事件实现。和信号量不同的是,事件可以通过“逻辑或”或者“逻辑与”将多个事件关联起来,形成事件集合,任务等待该事件集合满足条件之后,才会被唤醒,“逻辑或”指任务等到集合中的任意一个事件即可被唤醒,而“逻辑与”需要等到集合中的所有事件才会被唤醒;事件发送无法累积,如果多次向任务发送同一事件,且任务还没有清除该事件,则该事件只被视作发送1次,而信号量释放可以累积,每次释放资源数就会加1。

1.2 、事件原理解析
事件也是基于阻塞队列实现,任务接收事件,事件未发生并且超时参数不为0,就会导致任务阻塞,并且任务被放到阻塞队列,当另一个任务发送阻塞任务需要的事件时,阻塞任务被唤醒,并被放到就绪队列,如下图:

事件不仅可以用于任务间的同步,还可以用于中断和任务间的同步。例如,某个任务需要等待某个特定的条件,而这个条件需要中断程序触发,就可以采用事件的方法,如下图所示:

注:实现逻辑和步骤均和信号量类似,这里不再详细叙述流程。
1.3、API函数详解

1.3.1、事件控制块结构体

1.3.2、创建事件
os_event_create() 使用动态方法创建事件标志组<

3251

被折叠的 条评论
为什么被折叠?



