更新日期: 2022/06/01 来源: https://gitee.com/weharmony/kernel_liteos_a_note
los_event_pri.h 文件参考

浏览源代码.

结构体

struct  EventCond
 

函数

UINT32 OsEventReadWithCond (const EventCond *cond, PEVENT_CB_S eventCB, UINT32 eventMask, UINT32 mode, UINT32 timeout)
 有条件式读事件 更多...
 
VOID OsEventWriteUnsafe (PEVENT_CB_S eventCB, UINT32 events, BOOL once, UINT8 *exitFlag)
 以不安全的方式写事件 更多...
 
UINT32 OsEventReadOnce (PEVENT_CB_S eventCB, UINT32 eventMask, UINT32 mode, UINT32 timeout)
 只读一次事件 更多...
 
UINT32 OsEventWriteOnce (PEVENT_CB_S eventCB, UINT32 events)
 只写一次事件 更多...
 

函数说明

◆ OsEventReadOnce()

UINT32 OsEventReadOnce ( PEVENT_CB_S  eventCB,
UINT32  eventMask,
UINT32  mode,
UINT32  timeout 
)

只读一次事件

在文件 los_event.c323 行定义.

325{
326 return OsEventRead(eventCB, eventMask, mode, timeout, TRUE);
327}
LITE_OS_SEC_TEXT STATIC UINT32 OsEventRead(PEVENT_CB_S eventCB, UINT32 eventMask, UINT32 mode, UINT32 timeout, BOOL once)
读取指定事件类型,超时时间为相对时间:单位为Tick
Definition: los_event.c:213
函数调用图:

◆ OsEventReadWithCond()

UINT32 OsEventReadWithCond ( const EventCond cond,
PEVENT_CB_S  eventCB,
UINT32  eventMask,
UINT32  mode,
UINT32  timeout 
)

有条件式读事件

在文件 los_event.c371 行定义.

373{
374 UINT32 ret;
375 UINT32 intSave;
376
377 ret = OsEventReadCheck(eventCB, eventMask, mode);
378 if (ret != LOS_OK) {
379 return ret;
380 }
381
382 SCHEDULER_LOCK(intSave);
383
384 if (*cond->realValue != cond->value) {
385 eventCB->uwEventID &= cond->clearEvent;
386 goto OUT;
387 }
388
389 ret = OsEventReadImp(eventCB, eventMask, mode, timeout, FALSE);
390OUT:
391 SCHEDULER_UNLOCK(intSave);
392 return ret;
393}
LITE_OS_SEC_TEXT STATIC UINT32 OsEventReadImp(PEVENT_CB_S eventCB, UINT32 eventMask, UINT32 mode, UINT32 timeout, BOOL once)
读取指定事件类型的实现函数,超时时间为相对时间:单位为Tick
Definition: los_event.c:179
LITE_OS_SEC_TEXT STATIC UINT32 OsEventReadCheck(const PEVENT_CB_S eventCB, UINT32 eventMask, UINT32 mode)
检查读事件
Definition: los_event.c:157
unsigned int UINT32
Definition: los_typedef.h:57
UINT32 clearEvent
Definition: los_event_pri.h:47
volatile INT32 * realValue
Definition: los_event_pri.h:45
INT32 value
Definition: los_event_pri.h:46
UINT32 uwEventID
Definition: los_event.h:165
函数调用图:
这是这个函数的调用关系图:

◆ OsEventWriteOnce()

UINT32 OsEventWriteOnce ( PEVENT_CB_S  eventCB,
UINT32  events 
)

只写一次事件

在文件 los_event.c329 行定义.

330{
331 return OsEventWrite(eventCB, events, TRUE);
332}
LITE_OS_SEC_TEXT STATIC UINT32 OsEventWrite(PEVENT_CB_S eventCB, UINT32 events, BOOL once)
写入事件
Definition: los_event.c:273
函数调用图:
这是这个函数的调用关系图:

◆ OsEventWriteUnsafe()

VOID OsEventWriteUnsafe ( PEVENT_CB_S  eventCB,
UINT32  events,
BOOL  once,
UINT8 exitFlag 
)

以不安全的方式写事件

在文件 los_event.c247 行定义.

248{
249 LosTaskCB *resumedTask = NULL;
250 LosTaskCB *nextTask = NULL;
251 BOOL schedFlag = FALSE;
252 OsHookCall(LOS_HOOK_TYPE_EVENT_WRITE, eventCB, events);
253 eventCB->uwEventID |= events;//对应位贴上标签
254 if (!LOS_ListEmpty(&eventCB->stEventList)) {//等待事件链表判断,处理等待事件的任务
255 for (resumedTask = LOS_DL_LIST_ENTRY((&eventCB->stEventList)->pstNext, LosTaskCB, pendList);
256 &resumedTask->pendList != &eventCB->stEventList;) {//循环获取任务链表
257 nextTask = LOS_DL_LIST_ENTRY(resumedTask->pendList.pstNext, LosTaskCB, pendList);//获取任务实体
258 if (OsEventResume(resumedTask, eventCB, events)) {//是否恢复任务
259 schedFlag = TRUE;//任务已加至就绪队列,申请发生一次调度
260 }
261 if (once == TRUE) {//是否只处理一次任务
262 break;//退出循环
263 }
264 resumedTask = nextTask;//检查链表中下一个任务
265 }
266 }
267
268 if ((exitFlag != NULL) && (schedFlag == TRUE)) {//是否让外面调度
269 *exitFlag = 1;
270 }
271}
LITE_OS_SEC_ALW_INLINE STATIC INLINE BOOL LOS_ListEmpty(LOS_DL_LIST *list)
Identify whether a specified doubly linked list is empty. | 判断链表是否为空
Definition: los_list.h:321
LITE_OS_SEC_TEXT STATIC UINT8 OsEventResume(LosTaskCB *resumedTask, const PEVENT_CB_S eventCB, UINT32 events)
事件恢复操作
Definition: los_event.c:230
size_t BOOL
Definition: los_typedef.h:88
struct LOS_DL_LIST * pstNext
Definition: los_list.h:84
LOS_DL_LIST pendList
LOS_DL_LIST stEventList
Definition: los_event.h:167
函数调用图:
这是这个函数的调用关系图: