在实际应用中,任务常常需要与多个事件同步,即要根据多个信号量组合作用的结果来决定任务的运行方式。μC/OS-II为了实现多个信号量组合的功能定义了一种特殊的数据结构——信号量集。
信号量集所能管理的信号量都是一些二值信号,所有信号量集实质上是一种可以对多个输入的逻辑信号进行基本逻辑运算的组合逻辑,其输入为其他任务发出的多个信号,而输出为多个输入逻辑运算的结果。
uC/OS-II把信号量集的功能分成两部分:标志组和等待任务链表。这里的标志组+等待任务链表可以理解为之前讲的事件控制块。事件待列表中用全0表示没有等待事件的任务,标志组中的OSFlagWaitList = (void *)0;表示没有等待信号量集的任务。
- 标志组。
typedef struct os_flag_grp { /* Event Flag Group */
INT8U OSFlagType; /* Should be set to OS_EVENT_TYPE_FLAG */
void *OSFlagWaitList; /* Pointer to first NODE of task waiting on event flag */
<