18.0-uC/OS-III挂起内核对象
任务等待多个对象。然而, uC/OS-III只允许同时等待多个信号量和
消息队列。换句话说,不能同时等待多个事件标志组或mutex。
1.任务可以同时等待多个信号量和消息队列。 任务接收到一个信号量或消息就会被就绪。
任务通过调用OSPendMulti()等待多个对象,并可使设置等待时限。这个时限对应于所有的对象。
当在这个时限内没有收到一个对象,任务就会返回一个错误代号表示等待超时。

2.OSPendMulti()的原 型

( 1)OSPendMulti的第一个参数: 数据类型为OS_PEND_DATA的数组。 数组的大小决定了任务所等待的内核对象数。
例如, 如果任务要等待3个信号量和2个消息,那么数组的大小为5。
数据类型为OS_PEND_DATA的数组:

每个数组元素中的.PendObjPtr都要被初始化、指向所等待的对象。
3.当OSPendMulti()被调用,它首先确认数组中所有的元素是否为OS_SEM或OS_Q。
如果不是,就返回对应的错误代号。OSPendMulti()先遍历数组,查看其中的对象是否已经被提交。
如果有, OSPendMulti()就在表中该索引中填入相应的值: RdyObjPtr,RdyMsgPtr,.RdyMsgSize, .RdyTs。
.RdyObjPtr 指向已经被提及的对象。
.RdyMsgPtr 如果表中该索引等待的是消息队列,且有消息被接收,那么该指针指向消息
.RdyMsgSize 如果表中该索引等待的是消息队列,且有消息被接收,那么该值为消息中数据的大小。
.RdyTS 存放着对象被提交时的时间戳。
4.如果没有对象被提交, OSPendMulti()就会将任务放入所有对象的挂起队列中,
这是一个复杂的操作因为其它任务也可能在这些对象中等待。
5.当任务或ISR发送消息给等待该消息的任务,OSPendMulti()返回。
表示OS_PEND_DATA表中有对象被提交,这些通过在表中相应索引
中填入对应值实现。

6.当任务等待5个内核对象时, 且在任务调用OSPendMulti()之前已经有一个对象就绪,
那么表中结构将会是:

如果没有已提交的对象, OSPendMulti()就会将任务放入所有对象的挂起队列中。当有一个对象
被提交时OSPendMulti()就会返回。这这种情况下, OSPendMulti()会标记哪个对象已被提交。
OSPendMulti()是一个复杂的函数,可能会导致长临界段。
18.0-uC/OS-III挂起内核对象的更多相关文章
- uc/os iii移植到STM32F4---IAR开发环境
也许是先入为主的原因,时钟用不惯Keil环境,大多数的教程都是拿keil写的,尝试将官方的uc/os iii 移植到IAR环境. 1.首先尝试从官网上下载的官方移植的代码,编译通过,但是执行会报堆栈溢 ...
- uC/OS - III 移植 IAR平台
关于移植uC/OS-III 网上已经有很多教程了此处只是做个记录 首先下载源码然后解压得到下面的文件: 然后在模版工程里新建各种文件夹: 最后全部都添加进工程: OK了,编译一下,惊呆了,竟然 0错误 ...
- μC/OS-III---I笔记9---任务等待多个内核对象和任务内建信号量与消息队列
在一个任务等待多个内核对象在之前,信号量和消息队列的发布过程中都有等待多个内核对象判断的函数,所谓任务等待多个内核对象顾名思义就是一任务同时等待多个内核对象而被挂起,在USOC-III中一个任务等待多 ...
- 异步设备IO OVERLAPPED结构(设备内核对象 事件内核对象 可提醒IO)
同步IO是指:线程在发起IO请求后会被挂起,IO完成后继续执行. 异步IO是指:线程发起IO请求后并不会挂起而是继续执行.IO完毕后会得到设备驱动程序的通知. 一.异步准备与OVERLAPPED结构 ...
- Windows核心编程学习九:利用内核对象进行线程同步
注:源码为学习<Windows核心编程>的一些尝试,非原创.若能有助于一二访客,幸甚. 1.程序框架 #include "Queue.h" #include <t ...
- Windows核心编程&内核对象
1. 一个进程在初始化时,系统将会他分配一个空的句柄表,这个句柄表仅供内核对象使用,不供用户对象和GDI对象使用.进程在首次 初始化时,该句柄表为空.句柄表是一个由数据结构组成的数组,包含一个内核对象 ...
- 基于μC/OS—III的CC1120驱动程序设计
基于μC/OS—III的CC1120驱动程序设计 时间:2014-01-21 来源:电子设计工程 作者:张绍游,张贻雄,石江宏 关键字:CC1120 嵌入式操作系统 STM32F103ZE ...
- uC/OS II原理分析及源码阅读(一)
uC/OS II(Micro Control Operation System Two)是一个可以基于ROM运行的.可裁减的.抢占式.实时多任务内核,具有高度可移植性,特别适合于微处理器和控制器,是和 ...
- 关于uC/OS的简单学习(转)
1.微内核 与Linux的首要区别是,它是一个微内核,内核所实现的功能非常简单,主要包括: 一些通用函数,如TaskCreate(),OSMutexPend(),OSQPost()等. 中断处理函数, ...
随机推荐
- pom文件中maven-assembly-plugin插件学习
一.使用场景 如果项目是微服务架构,可能用到这个插件的概率比较高,平时普通的项目不需要这样的实现方式. 如果项目内的一部分通用功能,不需要挨个引用,则需要将通用功能部分达成jar包. 二.Maven- ...
- 每天进步一点点——mysql——mysqlbinlog
一. 简单介绍 mysqlbinlog:用于查看server生成的二进制日志的工具. 二. 命令格式 mysqlbinlog 选项日志文件1 三. 经常使用參数 ...
- 你可能不知道的IDEA高级调试技巧
一.条件断点 循环中经常用到这个技巧,比如:遍历1个大List的过程中,想让断点停在某个特定值. 参考上图,在断点的位置,右击断点旁边的小红点,会出来一个界面,在Condition这里填入断点条件即可 ...
- 【转】pymongo实现模糊查询
pymongo 模糊匹配查询在mongo中这样实现 {'asr':/若琪/} 使用pymongo 两种实现方式 1.import re {'asr':re.compile('若琪')} 2.{'asr ...
- go mod代理和小技巧
代理 go mod的代理比较出名的有微软的athens,可以基于它搭建一个私有的代理,管理内部的私有代码,而且微软提供了一个公共的代理,我们可以直接使用 Linux export GOPROXY=&q ...
- java 爬取 国税局 省市区级联关系
爬取网址 http://www.stats.gov.cn/tjsj/tjbz/tjyqhdmhcxhfdm/2018/index.html 因为数据比较大,存储为一个json,会内存溢出. 所以按照每 ...
- 查看和修改 mysql库、表、字段编码
查看编码 查看数据库编码. show variables like '%char%'; 查看表编码 show create table <表名>; 例:show create table ...
- 消息中间件系列一:入门、JMS规范、ActiveMQ使用
一.入门 1. 消息中间件的定义 没有标准定义,一般认为,采用消息传送机制/消息队列 的中间件技术,进行数据交流,用在分布式系统的集成 2. 为什么要用消息中间件 解决分布式系统之间消息的传递.电商场 ...
- Cookie详解整理
1.Cookie的诞生 由于HTTP协议是无状态的,而服务器端的业务必须是要有状态的.Cookie诞生的最初目的是为了存储web中的状态信息,以方便服务器端使用.比如判断用户是否是第一次访问网站.目前 ...
- maven jdk 版本配置
一种是配置 pom.xml,一种是配置 settings.xml. 方式一:settings.xml 配置 打开 %maven%/conf/settings.xml 文件并编辑它(%maven% 表示 ...