前面所讲解的等待内核对象,均是等待一个内核对象,这次笔记要讲解的是同时等待多个内核对象。这里的多个内核对象是指多值信号量和消息队列的任意组合。
如下图所示,一个任务可以同时等待任意数量的信号量或消息队列。
如果想要使用“等待多个内核对象” ,就必须事先使能“等待多个内核对象” 。 “等待多个内核对象”的使能位于“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数据类型
例程实验代码如下:
先定义内核对象
创建内核对象
确定如何发送内核对象
等待多个内核对象的函数使用
领取专属 10元无门槛券
私享最新 技术干货