UCOS-II API 参考手册 下载本文

参考手册

for (;;) { . .

err = OSQPost(CommQ, (void *)&CommRxBuf[0]); if (err == OS_NO_ERR) {

. /* 将消息放入消息队列 */ . } else {

. /* 消息队列已满 */ . } . . } }

μC/OS-II:实时操作系统内核

OSQPostFront( )

INT8U OSQPostFront(OS_EVENT *pevent, void *msg);

所属文件 调用者 开关量 OS_Q_EN 任务或中断 OSQPostFront()函数通过消息队列向任务发送消息。OSQPostFront()函数和OSQPost()函数非常相似,不同之处在于OSQPostFront()函数将发送的消息插到消息队列的最前端。也就是说,OSQPostFront()函数使得消息队列按照后入先出(LIFO)的方式工作,而不是先入先出(FIFO)。消息是一个指针长度的变量,在不同的程序中消息的使用也可能不同。如果队列中已经存满消息,返回错误码。OSQPost()函数立即返回调用者,消息也没能发到队列。如果有任何任务在等待队列中的消息,最高优先级的任务将得到这个消息。如果等待消息的任务优先级比发送消息的任务优先级高,那么高优先级的任务将得到消息而恢复执行,也就是说,发生了一次任务切换

OS_Q.C 参数

pevent 是指向即将接受消息的消息队列的指针。该指针的值在建立该队列时可以得到。(参考OSQCreate()函数)。

Msg 是即将实际发送给任务的消息。消息是一个指针长度的变量,在不同的程序中消息的使用也可能不同。不允许传递一个空指针。

返回值

OSQPost()函数的返回值为下述之一:

? OS_NO_ERR :消息成功的放到消息队列中。 ? OS_MBOX_FULL :消息队列已满。

? OS_ERR_EVENT_TYPE :pevent 不是指向消息队列的指针。

注意/警告

必须先建立消息队列,然后使用。 不允许传递一个空指针。

范例:

OS_EVENT *CommQ;

INT8U CommRxBuf[100];

void CommTaskRx(void *pdata) {

INT8U err;

pdata = pdata; for (;;) { .

参考手册

err = OSQPostFront(CommQ, (void *)&CommRxBuf[0]); if (err == OS_NO_ERR) {

. /* 将消息放入消息队列 */ } else {

. /* 消息队列已满 */ } . . } }

μC/OS-II:实时操作系统内核

OSQQuery( )

INT8U OSQQuery(OS_EVENT *pevent, OS_Q_DATA *pdata);

所属文件 调用者 开关量 OS_Q_EN 任务或中断 OSQQuery()函数用来取得消息队列的信息。用户程序必须建立一个OS_Q_DATA的数据结构,该结构用来保存从消息队列的事件控制块得到的数据。通过调用OSQQuery()函数可以知道任务是否在等待消息、有多少个任务在等待消息、队列中有多少消息以及消息队列可以容纳的消息数。OSQQuery()函数还可以得到即将被传递给任务的消息的信息。

OS_Q.C 参数

pevent 是指向即将接受消息的消息邮箱的指针。该指针的值在建立该消息邮箱时可以得到。(参考OSQCreate()函数)。

Pdata 是指向OS_Q_DATA数据结构的指针,该数据结构包含下述成员: Void *OSMsg; /* 下一个可用的消息*/ INT16U OSNMsgs; /* 队列中的消息数目*/ INT16U OSQSize; /* 消息队列的大小 */ INT8U OSEventTbl[OS_EVENT_TBL_SIZE]; /* 消息队列的等待队列*/ INT8U OSEventGrp;

返回值

OSQQuery()函数的返回值为下述之一: ? OS_NO_ERR :调用成功

? OS_ERR_EVENT_TYPE :pevent 不是指向消息队列的指针。

注意/警告

必须先建立消息队列,然后使用。

范例:

OS_EVENT *CommQ;

void Task (void *pdata) {

OS_Q_DATA qdata; INT8U err;