函数 | |
LITE_OS_SEC_TEXT_INIT UINT32 | LOS_EventInit (PEVENT_CB_S eventCB) |
初始化一个事件控制块 更多... | |
LITE_OS_SEC_TEXT STATIC UINT32 | OsEventParamCheck (const VOID *ptr, UINT32 eventMask, UINT32 mode) |
事件参数检查 更多... | |
LITE_OS_SEC_TEXT UINT32 | OsEventPoll (UINT32 *eventID, UINT32 eventMask, UINT32 mode) |
根据用户传入的事件值、事件掩码及校验模式,返回用户传入的事件是否符合预期 更多... | |
LITE_OS_SEC_TEXT STATIC UINT32 | OsEventReadCheck (const PEVENT_CB_S eventCB, UINT32 eventMask, UINT32 mode) |
检查读事件 更多... | |
LITE_OS_SEC_TEXT STATIC UINT32 | OsEventReadImp (PEVENT_CB_S eventCB, UINT32 eventMask, UINT32 mode, UINT32 timeout, BOOL once) |
读取指定事件类型的实现函数,超时时间为相对时间:单位为Tick 更多... | |
LITE_OS_SEC_TEXT STATIC UINT32 | OsEventRead (PEVENT_CB_S eventCB, UINT32 eventMask, UINT32 mode, UINT32 timeout, BOOL once) |
读取指定事件类型,超时时间为相对时间:单位为Tick 更多... | |
LITE_OS_SEC_TEXT STATIC UINT8 | OsEventResume (LosTaskCB *resumedTask, const PEVENT_CB_S eventCB, UINT32 events) |
事件恢复操作 更多... | |
LITE_OS_SEC_TEXT VOID | OsEventWriteUnsafe (PEVENT_CB_S eventCB, UINT32 events, BOOL once, UINT8 *exitFlag) |
以不安全的方式写事件 更多... | |
LITE_OS_SEC_TEXT STATIC UINT32 | OsEventWrite (PEVENT_CB_S eventCB, UINT32 events, BOOL once) |
写入事件 更多... | |
LITE_OS_SEC_TEXT UINT32 | LOS_EventPoll (UINT32 *eventID, UINT32 eventMask, UINT32 mode) |
根据用户传入的事件值、事件掩码及校验模式,返回用户传入的事件是否符合预期 更多... | |
LITE_OS_SEC_TEXT UINT32 | LOS_EventRead (PEVENT_CB_S eventCB, UINT32 eventMask, UINT32 mode, UINT32 timeout) |
读取指定事件类型,超时时间为相对时间:单位为Tick 更多... | |
LITE_OS_SEC_TEXT UINT32 | LOS_EventWrite (PEVENT_CB_S eventCB, UINT32 events) |
写指定的事件类型 更多... | |
LITE_OS_SEC_TEXT_MINOR UINT32 | OsEventReadOnce (PEVENT_CB_S eventCB, UINT32 eventMask, UINT32 mode, UINT32 timeout) |
只读一次事件 更多... | |
LITE_OS_SEC_TEXT_MINOR UINT32 | OsEventWriteOnce (PEVENT_CB_S eventCB, UINT32 events) |
只写一次事件 更多... | |
LITE_OS_SEC_TEXT_INIT UINT32 | LOS_EventDestroy (PEVENT_CB_S eventCB) |
销毁指定的事件控制块 更多... | |
LITE_OS_SEC_TEXT_MINOR UINT32 | LOS_EventClear (PEVENT_CB_S eventCB, UINT32 eventMask) |
清除指定的事件类型 更多... | |
LITE_OS_SEC_TEXT UINT32 | OsEventReadWithCond (const EventCond *cond, PEVENT_CB_S eventCB, UINT32 eventMask, UINT32 mode, UINT32 timeout) |
有条件式读事件 更多... | |
事件(Event)是一种任务间通信的机制,可用于任务间的同步。 多任务环境下,任务之间往往需要同步操作,一个等待即是一个同步。事件可以提供一对多、多对多的同步操作。 一对多同步模型:一个任务等待多个事件的触发。可以是任意一个事件发生时唤醒任务处理事件,也可以是几个事件都发生后才唤醒任务处理事件。 多对多同步模型:多个任务等待多个事件的触发。 事件特点 任务通过创建事件控制块来触发事件或等待事件。 事件间相互独立,内部实现为一个32位无符号整型,每一位标识一种事件类型。第25位不可用,因此最多可支持31种事件类型。 事件仅用于任务间的同步,不提供数据传输功能。 多次向事件控制块写入同一事件类型,在被清零前等效于只写入一次。 多个任务可以对同一事件进行读写操作。 支持事件读写超时机制。 事件读取模式 在读事件时,可以选择读取模式。读取模式如下: 所有事件(LOS_WAITMODE_AND):逻辑与,基于接口传入的事件类型掩码eventMask, 只有这些事件都已经发生才能读取成功,否则该任务将阻塞等待或者返回错误码。 任一事件(LOS_WAITMODE_OR):逻辑或,基于接口传入的事件类型掩码eventMask, 只要这些事件中有任一种事件发生就可以读取成功,否则该任务将阻塞等待或者返回错误码。 清除事件(LOS_WAITMODE_CLR):这是一种附加读取模式,需要与所有事件模式或任一事件模式结合 使用(LOS_WAITMODE_AND | LOS_WAITMODE_CLR或 LOS_WAITMODE_OR | LOS_WAITMODE_CLR)。在这种模式下, 当设置的所有事件模式或任一事件模式读取成功后,会自动清除事件控制块中对应的事件类型位。 运作机制 任务在调用LOS_EventRead接口读事件时,可以根据入参事件掩码类型eventMask读取事件的单个或者多个事件类型。 事件读取成功后,如果设置LOS_WAITMODE_CLR会清除已读取到的事件类型,反之不会清除已读到的事件类型,需显式清除。 可以通过入参选择读取模式,读取事件掩码类型中所有事件还是读取事件掩码类型中任意事件。 任务在调用LOS_EventWrite接口写事件时,对指定事件控制块写入指定的事件类型, 可以一次同时写多个事件类型。写事件会触发任务调度。 任务在调用LOS_EventClear接口清除事件时,根据入参事件和待清除的事件类型, 对事件对应位进行清0操作。 使用场景 事件可应用于多种任务同步场景,在某些同步场景下可替代信号量。 注意事项 在系统初始化之前不能调用读写事件接口。如果调用,系统运行会不正常。 在中断中,可以对事件对象进行写操作,但不能进行读操作。 在锁任务调度状态下,禁止任务阻塞于读事件。 LOS_EventClear 入参值是:要清除的指定事件类型的反码(~events)。 为了区别LOS_EventRead接口返回的是事件还是错误码,事件掩码的第25位不能使用。
在文件 los_event.c 中定义.
LITE_OS_SEC_TEXT STATIC UINT32 OsEventParamCheck | ( | const VOID * | ptr, |
UINT32 | eventMask, | ||
UINT32 | mode | ||
) |
根据用户传入的事件值、事件掩码及校验模式,返回用户传入的事件是否符合预期
在文件 los_event.c 第 133 行定义.
LITE_OS_SEC_TEXT STATIC UINT32 OsEventRead | ( | PEVENT_CB_S | eventCB, |
UINT32 | eventMask, | ||
UINT32 | mode, | ||
UINT32 | timeout, | ||
BOOL | once | ||
) |
读取指定事件类型,超时时间为相对时间:单位为Tick
在文件 los_event.c 第 213 行定义.
LITE_OS_SEC_TEXT STATIC UINT32 OsEventReadCheck | ( | const PEVENT_CB_S | eventCB, |
UINT32 | eventMask, | ||
UINT32 | mode | ||
) |
检查读事件
在文件 los_event.c 第 157 行定义.
LITE_OS_SEC_TEXT STATIC UINT32 OsEventReadImp | ( | PEVENT_CB_S | eventCB, |
UINT32 | eventMask, | ||
UINT32 | mode, | ||
UINT32 | timeout, | ||
BOOL | once | ||
) |
读取指定事件类型的实现函数,超时时间为相对时间:单位为Tick
在文件 los_event.c 第 179 行定义.
LITE_OS_SEC_TEXT_MINOR UINT32 OsEventReadOnce | ( | PEVENT_CB_S | eventCB, |
UINT32 | eventMask, | ||
UINT32 | mode, | ||
UINT32 | timeout | ||
) |
只读一次事件
在文件 los_event.c 第 323 行定义.
LITE_OS_SEC_TEXT UINT32 OsEventReadWithCond | ( | const EventCond * | cond, |
PEVENT_CB_S | eventCB, | ||
UINT32 | eventMask, | ||
UINT32 | mode, | ||
UINT32 | timeout | ||
) |
LITE_OS_SEC_TEXT STATIC UINT8 OsEventResume | ( | LosTaskCB * | resumedTask, |
const PEVENT_CB_S | eventCB, | ||
UINT32 | events | ||
) |
事件恢复操作
在文件 los_event.c 第 230 行定义.
LITE_OS_SEC_TEXT STATIC UINT32 OsEventWrite | ( | PEVENT_CB_S | eventCB, |
UINT32 | events, | ||
BOOL | once | ||
) |
写入事件
在文件 los_event.c 第 273 行定义.
LITE_OS_SEC_TEXT_MINOR UINT32 OsEventWriteOnce | ( | PEVENT_CB_S | eventCB, |
UINT32 | events | ||
) |
只写一次事件
在文件 los_event.c 第 329 行定义.
LITE_OS_SEC_TEXT VOID OsEventWriteUnsafe | ( | PEVENT_CB_S | eventCB, |
UINT32 | events, | ||
BOOL | once, | ||
UINT8 * | exitFlag | ||
) |
以不安全的方式写事件
在文件 los_event.c 第 247 行定义.