文件名称:同时等待多个内核对象-倒数粗糙熵图像阈值化分割算法
文件大小:6.12MB
文件格式:PDF
更新时间:2024-06-29 05:03:03
UCOSIII 教程
13.1 同时等待多个内核对象 UCOSIII 中一个任务可以同时等待任意数量的信号量或者消息队列,当只要等到其中的任 意一个的时候就会导致该任务进入就绪态,如图 13.1.1 所示。 消息队列 消息队列 信号量 信号量 信号量 任务 OSSemPost() OSSemPost() OSQPost() OSQPost() OSSemPost() OSPendMulti() 超时 图 13.1.1 任务等待多个内核对象 在图 13.1.1 中任务通过调用函数 OSPendMulti()来等待多个内核对象,我们可以设定一个等 待超时值,如果在指定的时间内没有一个内核对象被发布,那么将返回一个错误码,表示等待 超时。 13.2 OSPendMulti()函数 函数 OSPendMulti()用来等待多个内核对象,调用 OSPendMulti()时,如果这些对象中有多 个可用,则所有可用的信号量和消息都将返回给调用者,如果没有任何对象可用,则 OSPendMulti()将挂起当前任务,直到以下任一情况发生: 1、对象变为可用。 2、到达设定的超时时间。 3、一个或多个任务被删除或被终止。 4、一个或多个对象被删除。 如果一个对象变为可用,并且有多个任务在等待这个对象,则 UCOSIII 将恢复优先级最高 的那个任务,函数 OSPendMulti()原型如下: OS_OBJ_QTY OSPendMulti ( OS_PEND_DATA *p_pend_data_tbl, OS_OBJ_QTY tbl_size,