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

第六章 信号量集

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);

函数做了两个工作:从空任务组链表中取下一个标志组,给成员OSFlagTypeOSFlagFlags赋初值;令指向等待任务链表的指针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);

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值