ARM---ucos常用系统函数参考手册(6)

发布时间:2021-06-06

好东西!

息的含义是和具体的应用密切相关的。
函数原型:OS_EVENT *OSQCreate (void **start, INT8U size);
参数说明:start 是消息内存区的首地址,消息内存区是一个指针数组。
size 是消息内存区的大小。
返回值:
OSQCreate() 函数返回一个指向消息队列控制块的指针。如果没有空闲的控制块,OSQCreate() 函数返回空指针。

2 OSQPend()
该函数用于任务等待消息。消息通过中断或任务发送给需要的任务。消息是一个指针变量,在不同的应用中消息的具体含义不同。如果调用 OSQPend() 函数时队列中已经存在消息,那么该消息被返回给 OSQPend() 函数的调用者,该消息同时从队列中清除。如果调用 OSQPend() 函数时队列中没有消息,OSQPend() 函数挂起调用任务直到得到消息或超出定义的超时时间。如果同时有多个任务等待同一个消息,μC/OS-Ⅱ默认最高优先级的任务取得消息。一个由 OSTaskSuspend() 函数挂起的任务也可以接受消息,但这个任务将一直保持挂起状态直到通过调用 OSTaskResume() 函数恢复任务的运行。
函数原型:void *OSQPend (OS_EVENT *pevent, INT16U timeout, INT8U *err);
参数说明:pevent 是指向消息队列的指针,该指针的值在建立该队列时可以得到。(参考 OSQCreate() 函数)。
timeout 允许一个任务以指定数目的时钟节拍等待消息。超时后如果还没有得到消息则恢复成就绪状态。如果该值设置成零则表示任务将持续地等待消息,最大的等待时间为65535个时钟节拍。这个时间长度并不是非常严格的,可能存在一个时钟节拍的误差。
err 是指向包含错误码的变量的指针。OSQPend() 函数返回的错误码可能为下述几种:
* OS_NO_ERR :消息被正确地接受。
* OS_TIMEOUT :消息没有在指定的时钟周期数内接收到消息。
* OS_ERR_PEND_ISR :从中断调用该函数。虽然规定了不允许从中断中调用该函数,但μC/OS-Ⅱ仍然包含了检测这种情况的功能。
* OS_ERR_EVENT_TYPE :pevent 不是指向消息队列的指针。
返回值:
OSQPend() 函数返回取得的消息并将 *err 置为 OS_NO_ERR。如果没有在指定数目的时钟节拍内接受到消息,OSQPend() 函数返回空指针并将 *err 设置为 OS_TIMEOUT。

3 OSQPostFront()
该函数用于向消息队列发送消息。OSQPostFront() 函数和 OSQPost() 函数非常相似,不同之处在于 OSQPostFron
t() 函数将发送的消息插到消息队列的最前端。也就是说,OSQPostFront() 函数使得消息队列按照后入先出(LIFO)的方式工作,而不是先入先出(FIFO)。消息是一个指针长度的变量,在不同的应用中消息的含义也可能不同。如果队列中已经存满消息,则此调用将返回错误码。OSQPost

精彩图片

热门精选

大家正在看