C/OS-III 学习笔记(9)

前面所讲解的等待内核对象,均是等待一个内核对象,这次笔记要讲解的是同时等待多个内核对象。这里的多个内核对象是指多值信号量和消息队列的任意组合。

如下图所示,一个任务可以同时等待任意数量的信号量或消息队列。

如果想要使用“等待多个内核对象” ,就必须事先使能“等待多个内核对象” 。 “等待多个内核对象”的使能位于“os_cfg.h”

另外,值得注意,等待多个内核对象的内核对象指的是多值信号量或消息队列,要等待这两种对象, 均须先使能它们, 分别为OS_CFG_SEM_EN和OS_CFG_Q_EN, 均位于 “os_cfg.h” ,

一个任务可以调用OSPendMulti ()函数用于等待多个内核对象(多值信号量或消息队列) 。其函数信息如下所示

该函数使用信息如下所示

(1)该函数OSPendMulti()传递一个参数OS_PEND_DATA类型的数组。调用者必须初始化这个数组。

举个例子,如果一个任务想要等待3个信号量和两个消息队列,那么这个数组应该包含5个OS_PEND_DATA类型的元素,如下所示

调用这个函数的任务还需要初始化这个数组的每个元素的指针。使得各个指正指向被等待的对象。举例如下所示

(2)第二个参数则指定了OS_PEND_DATA的大小

(3)该参数用来设定一个等待超时值

(4)选择是否使用阻塞模式

(5)返回错误代码

(6)这里将所有的内核对象转换为OS_PEND_OBJ数据类型

例程实验代码如下:

先定义内核对象

创建内核对象

确定如何发送内核对象

等待多个内核对象的函数使用

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180829G13FHB00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券