uc/os-iii学习笔记---同时等待多个内核对象

同时等待多个内核对象


前面我们讲过都是等待单个内核对象,包括:信号量、互斥信号量、消息队列和事件标志组。在UCOS–III中允许任务同时等待多个信号量和多个消息队列,也就是说,UCOS–III不支持同时等待多个事件标志组或互斥信号量
一个任务可以等待任意数量的信号量和消息队列,第一个信号量或消息队列的发布会导致该任务进入就绪态。

  • 一个任务可以调用函数OSPendMulti()函数来等待多个对象,并且可以根据需要指定一个等待超时值,函数OSPendMulti(),举个例子
  • -
OSPendMulti((OS_PEND_DATA*  )pend_multi_tbl,//需定义的数组,数组的例子在此函数下面
            (OS_OBJ_QTY     )CORE_OBJ_NUM,  //内核对象数量
            (OS_TICK        )0,             //0就是一直等待下去
            (OS_OPT         )OS_OPT_PEND_BLOCKING,//对象未发送时任务挂起等待,OS_OPT_NON_PEND_BLOCKING就是对象未发送直接返回
            (OS_ERR*        )&err);        //同样是返回的错误信息
OS_PEND_DATA pend_multi_tbl[CORE_OBJ_NUM];//定义一个数组,数组大小推荐使用宏定义方式定义
pend_multi_tbl[0].PendObjPtr=(OS_PEND_OBJ*)&Test_Sem1;//等待信号Test_Sem1
pend_multi_tbl[1].PendObjPtr=(OS_PEND_OBJ*)&Test_Sem2;//等待信号Test_Sem2
pend_multi_tbl[2].PendObjPtr=(OS_PEND_OBJ*)&Test_Q;//等待消息Test-Q
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值