实际应用中,任务常常需要与多个事件同步,就需要使用多个信号量。UCOS为实现多个信号量组合的功能定义了一种特殊的数据结构——信号量集。
一. 信号量集的结构
由两部分组成,一是信号量标志组,存放各个信号量;二是等待任务链表,存放等待信号量的的任务。
1. 信号量集的标志组
UCOS不是使用事件控制块的结构描述信号量集,而是使用一个标志组的机构来描述信号量集OS_FLG_GRP
2. 等待任务链表
与其他事件不同,信号量集采用一个双向链表来组织等待任务。标志组OS_FLG_GRP的成员OSFlagWaitList指向信号量集的这个等待任务链表。
等待任务链表中的节点OS_FLAG_NODE中的成员OSFlagNodeFlags相当于一个过滤器,它可以将请求任务需要的信号筛选出来,不需要的信号屏蔽掉。
对等待任务链表的操作:添加节点和删除节点
二. 信号量集的操作
创建;请求;发送信号;释放信号;查询;删除