uc/os-ii信号量集
2015-07-04 10:00
323 查看
在实际应用中,任务常常需要与多个事件同步,即要根据多个信号量组合作用的结果来决定任务的运行方式。μC/OS-II为了实现多个信号量组合的功能定义了一种特殊的数据结构——信号量集。
信号量集所能管理的信号量都是一些二值信号,所有信号量集实质上是一种可以对多个输入的逻辑信号进行基本逻辑运算的组合逻辑,其输入为其他任务发出的多个信号,而输出为多个输入逻辑运算的结果。
uC/OS-II把信号量集的功能分成两部分:标志组和等待任务链表。这里的标志组+等待任务链表可以理解为之前讲的事件控制块。事件待列表中用全0表示没有等待事件的任务,标志组中的OSFlagWaitList = (void *)0;表示没有等待信号量集的任务。
标志组。
等待任务链表由等待任务控制块
信号量集的操作与其他事件累死,不再详细分析。
信号量集所能管理的信号量都是一些二值信号,所有信号量集实质上是一种可以对多个输入的逻辑信号进行基本逻辑运算的组合逻辑,其输入为其他任务发出的多个信号,而输出为多个输入逻辑运算的结果。
uC/OS-II把信号量集的功能分成两部分:标志组和等待任务链表。这里的标志组+等待任务链表可以理解为之前讲的事件控制块。事件待列表中用全0表示没有等待事件的任务,标志组中的OSFlagWaitList = (void *)0;表示没有等待信号量集的任务。
标志组。
typedef struct os_flag_grp { /* Event Flag Group */ INT8U OSFlagType; /* Should be set to OS_EVENT_TYPE_FLAG */ void *OSFlagWaitList; /* Pointer to first NODE of task waiting on event flag */ OS_FLAGS OSFlagFlags; /* 8, 16 or 32 bit flags */ #if OS_FLAG_NAME_SIZE > 1 INT8U OSFlagName[OS_FLAG_NAME_SIZE]; #endif } OS_FLAG_GRP;
等待任务链表由等待任务控制块
OS_FLAG_NODE链接的双向链表构成。
typedef struct os_flag_node { /* Event Flag Wait List Node */ void *OSFlagNodeNext; /* Pointer to next NODE in wait list */ void *OSFlagNodePrev; /* Pointer to previous NODE in wait list */ void *OSFlagNodeTCB; /* Pointer to TCB of waiting task */ void *OSFlagNodeFlagGrp; /* Pointer to Event Flag Group */ OS_FLAGS OSFlagNodeFlags; /* Event flag to wait on */ INT8U OSFlagNodeWaitType; /* Type of wait: */ /* OS_FLAG_WAIT_AND */ /* OS_FLAG_WAIT_ALL */ /* OS_FLAG_WAIT_OR */ /* OS_FLAG_WAIT_ANY */ } OS_FLAG_NODE;
信号量集的操作与其他事件累死,不再详细分析。
相关文章推荐
- Spigot 算法之一 计算调和级数的和
- struts2 java.lang.ClassNotFoundException: org.apache.commons.lang.xwork.StringUtils
- 【c语言】字符串替换空格:请实现一个函数,把字符串中的每个空格替换成“%20”
- php对浮点数小数取整,php除法取整数
- 剑指offer: 从上往下打印二叉树(树)
- Linux主流桌面环境简单介绍
- Linux命令学习
- Vijos P1021Victoria的舞会1
- D3D绘制字体
- NOI2010 航空管制
- 进程间通信第二课--信号量 共享内存 消息队列
- 技术面试请注意
- RHEL7 -- 通过gerp使用正则表达式
- apache ab工具页面压力测试返回结果含义解释
- BZOJ 1087 互不侵犯king
- Android handler
- iOS synchronized的作用
- android耗时任务_AsyncTask
- Android设置横竖屏
- 解析C#中[],List,Array,ArrayList的区别及应用