嵌入式实时操作系统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);
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);
相关文章推荐
- 嵌入式实时操作系统ucos/ii 原理与应用(四)
- 嵌入式实时操作系统ucos/ii 原理与应用(二)
- 嵌入式实时操作系统ucos/ii 原理与应用(一)
- 嵌入式实时操作系统ucos/ii 原理与应用(六)
- 嵌入式实时操作系统ucos/ii 原理与应用(七)
- 参考任哲的《嵌入式实时操作系统μC_OS-II原理及应用》,对UCOS的任务调度做了下整理。
- 《嵌入式实时操作系统μC/OS-II原理及应用(第2版)》目录
- [uC/OS-II原理及应用]嵌入式实时操作系统的基本概念
- 嵌入式实时操作系统μC/OS-||原理及应用学习4----任务的同步与通信
- 嵌入式实时操作系统μC/OS-II及其应用
- 嵌入式实时操作系统μC/OS-||原理及应用学习5----信号量集
- 嵌入式实时操作系统ucos-II
- 嵌入式实时操作系统μC/OS-||原理及应用学习3----μC/OS-||的中断和时钟
- 嵌入式实时操作系统μC/OS-||原理及应用学习1
- 嵌入式实时操作系统μC/OS-||原理及应用学习6----动态内存管理
- 嵌入式实时操作系统ucosii原理及应用(任哲)-- --阅读笔记2
- 什么是嵌入式实时操作系统ucos-ii?有了解的吗?
- 邵贝贝译<嵌入式实时操作系统uCOS-ii>:第13章 uCOS操作系统移植分析
- 嵌入式实时操作系统μC/OS-||原理及应用学习2---任务
- uCOS-II学习笔记之- uCOS-II实时操作系统的特点