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

来源:互联网 发布:淘宝修改头像失败 编辑:程序博客网 时间:2024/05/22 04:30

同时等待多个内核对象


前面我们讲过都是等待单个内核对象,包括:信号量、互斥信号量、消息队列和事件标志组。在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_Sem1pend_multi_tbl[1].PendObjPtr=(OS_PEND_OBJ*)&Test_Sem2;//等待信号Test_Sem2pend_multi_tbl[2].PendObjPtr=(OS_PEND_OBJ*)&Test_Q;//等待消息Test-Q
0 0
原创粉丝点击