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()等. 中断处理函数, ...
随机推荐
- 初尝 nginx
第一次尝试用 nginx,记录下几个简单命令: // 启动 start nginx // 测试并设置配置文件 nginx -t -c conf\nginx.conf // 修改配置文件后重载 ngin ...
- C#跑马灯,图片滚动,后台获取图片地址。动态绑定图片,imag显示文字
下面附下载地址. http://download.csdn.net/download/njxiaogui/10002058 1.跑马灯效果,图片连续循环滚动,图片下面并可附文字描述,图片是从数据库中获 ...
- 数字签名与HTTPS详解
因为HTTP协议本身存在着明文传输.不能很好的验证通信方的身份和无法验证报文的完整性等一些安全方面的确点,所以才有了HTTPS的缺陷.HTTPS确切的的说不是一种协议,而是HTTP + SSL (TS ...
- 阿里云-CDN
1.什么是CDN 内容分发网络,意思是将内容(静态资源,如文件等)缓存到全球加速节点,用户请求这些内容时,请求将调度到最近的CDN节点,加快了访问速度. 2.CDN原理 1.用户(北京)向www.a. ...
- Zookeeper —— 一致性协议
一致性协议 为了解决分布式系统中存在的一致性问题,提出了一些经典的一致性协议和算法. 其中著名的有:二阶段提交协议.三阶段提交协议和 Paxos 算法. 2PC 与 3PC 2PC 2pc(Two-P ...
- Geoserver GeoWebCache 切图失败 This requested used more time than allowed and has been forcefully stopped. Max rendering time is 60.0s
错误信息: This requested used more time than allowed and has been forcefully stopped. Max rendering time ...
- 自己动手在win2003系统中添加虚拟网卡
运用虚拟网卡我们可以更好地使用我们的网络,那么在win2003中该怎么操作呢?下面就为大家介绍下具体的步骤 虚拟网卡是用软件来实现虚拟的网卡,通过运用虚拟网卡我们可以更好地使用我们的网络.但是虚拟 ...
- c# httpclient
using Newtonsoft.Json; using System; using System.Collections.Generic; using System.IO; using System ...
- webapi 统一处理时间格式
public class UnixDateTimeConvertor : DateTimeConverterBase { public override object ReadJson(JsonRea ...
- 转:SQL Server 动态行转列
http://www.cnblogs.com/gaizai/p/3753296.html http://www.cnblogs.com/maanshancss/archive/2013/03/13/2 ...