1.信号量:是指上为一种条件标志,代表了程序继续运行所需要的前提条件。
2.信号量集:实质为一个多输入多输出的逻辑集合,其输入为其他任务发出的多个信号,输出为多个输入逻辑运算的结果。
3.μC/OS-||信号量集的结构:标志组和等待任务链表。
4.标志组:信号量集的控制块,存放了信号量集的所有信号,其主要组成部分就是一个叫做信号列表的二进制数OSFlagFlags。OSFlagsFlags其实为一个位图,用来接收并保存其他任务发送来的信号量。
typedef struct{
INT8U OSFlagType;//识别是否为信号量集的标志
void * OSFlagWaitList;//指向等待任务链表的指针
OS_FLAGS OSFlagFlags;//输入信号量值表
}OS_FLAG_GRP;
5.等待任务:已经向信号量集发出了请求操作的任务。
6.等待任务的主要操作:
a.在多个信号量的输入中挑选等待任务感兴趣的输入;->OSFlagNodeFlags。
b.把挑选出来的输入按照等待任务所希望的逻辑来运算,以得到输出。->OSFlagNodeWaitType。
7.OS_FLAG_NODE:
8.等待任务链表与标志组组成的信号量集结构图:
9.等待任务链表:等待任务组成的双向链表。
10.对等待任务链表的操作:
a.添加节点:OS_FlagBlock()。
b.删除节点:OS_FlagUnlink()。
信号量集的操作
11.创建信号量集:OSFlagCreate()。返回的是这个信号量集的标志组的指针。
12.请求信号量集:OSFlagPend()。成功则返回标志组成员OSFlagFlags的值。
OSFlagAccept()。无等待的请求。
13.向信号量集发送信号:OSFlagPost()。对信号量集标志组中的信号进行置1或者置0的操作。
14.查询信号量集的状态:OSFlagQuery()。返回被查询信号量集标志组的成员OSFlagFlags()。
15.删除信号量集:OSFlagDel()。
1.信号量集实现了多个信号量的组合功能,它是一个多输入多输出系统,使一个任务可以与多个任务同步。
2.信号量级的多个信号量输入由标志组来存放,等待任务控制块对标志组中的输入信号进行过滤并实施逻辑运算,其结果为等待任务所请求的信号量值。
3.每个信号量集都有一个等待任务链表,链表的每一个节点都通过任务控制块关联着一个任务。