您的位置:首页 > 其它

嵌入式实时操作系统ucos/ii 原理与应用(五)

2016-09-16 22:06 274 查看
第六章 信号量集

6.1 信号量集的结构

6.1.1 基本概念

信号量集:



信号量集实质上就是一个多输入、多输出的组合逻辑,输入为其他任务发出的多个信号,输出为这多个输入逻辑运算的结果。

6.1.2 信号量集的结构

    信号量集由一个标志组和多个等待任务控制块组成

信号量集的功能:标志组、等待任务链表

标志组:信号量集的所有信号

等待任务链表:每个节点都对应着一个OS_FLAG_NODE的结构

1.      信号量集的标志组

二进制数OSFlagFlags,位图:用来接收并保存其他任务所发送来的信号量集(输入信号暂存器)

2.      等待任务

已经向信号量集发出了请求操作的任务

操作:

在多个信号量的输入中挑选等待任务感兴趣的输入(OSFlagNodeFlags标志列表);

把挑选出来的输入按照等待任务所希望的逻辑来运算,以得出输出(OSFlagNodeWaitType变量)。



3.      等待任务链表



6.1.3 对等待任务链表的操作

1. 添加节点

   static void OS_FlagBlock(OS_FLAG_GRP *pgrp, OS_FLAG_NODE *pnode,OS_FLAGS flags, INT8U wait_type, INT16U timeout);

2. 删除节点

   void OS_FlagUnlink(OS_FLAG_NODE *pnode);

6.1.4 空标志组链表

6.2 信号量集的操作

6.2.1 创建信号量集

OS_FLAG_GRP *OSFlagCreate(OS_FLAGSflags, INT8U *err);

函数做了两个工作:从空任务组链表中取下一个标志组,给成员OSFlagType和OSFlagFlags赋初值;令指向等待任务链表的指针OSFlagWaitList为空指针。

6.2.2 请求信号量集

OS_FLAGS OSFlagPend(OS_FLAG_GRP*pgrp, OS_FLAGS flags, INT8U wait_type, INT16U timeout, INT8U *err);

OS_FLAGS OSFlagAccept(OS_FLAG_GRP*pgrp, OS_FLAGS flags, INT8U wait_type, INT8U *err);无等待请求信号量集

6.2.3 向信号量集发送信号

   OS_FLAGS OSFlagPost(OS_FLAG_GRP *pgrp, OS_FLAGS flags, INT8U opt, INT8U*err);

6.2.4 查询信号量集的状态

   OS_FLAGS OSFlagQuery(OS_FLAG_GRP *pgrp, INT8U *err);

6.2.5 删除信号量集

   OS_FLAGS OSFlagDel(OS_FLAG_GRP *pgrp, INT8U opt, INT8U *err);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: