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

参考手册

OS_EVENT *CommMbox;

void CommTask(void *pdata) {

INT8U err; void *msg;

pdata = pdata; for (;;) { . .

msg = OSMboxPend(CommMbox, 10, &err); if (err == OS_NO_ERR) { .

. /* 消息正确的接受 */ . } else { .

. /* 在指定时间内没有接受到消息*/ . } . . } }

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

OSMboxPost( )

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

所属文件 调用者 开关量 OS_MBOX_EN 任务或中断 OSMboxPost()函数通过消息邮箱向任务发送消息。消息是一个指针长度的变量,在不同的程序中消息的使用也可能不同。如果消息邮箱中已经存在消息,返回错误码说明消息邮箱已满。OSMboxPost()函数立即返回调用者,消息也没有能够发到消息邮箱。如果有任何任务在等待消息邮箱的消息,最高优先级的任务将得到这个消息。如果等待消息的任务优先级比发送消息的任务优先级高,那么高优先级的任务将得到消息而恢复执行,也就是说,发生了一次任务切换。

OS_MBOX.C 参数

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

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

返回值

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

? OS_NO_ERR :消息成功的放到消息邮箱中。

? OS_MBOX_FULL :消息邮箱已经包含了其他消息,不空。 ? OS_ERR_EVENT_TYPE :pevent 不是指向消息邮箱的指针。

注意/警告

必须先建立消息邮箱,然后使用。

不允许传递一个空指针,因为这意味着消息邮箱为空。

范例:

OS_EVENT *CommMbox; INT8U CommRxBuf[100];

void CommTaskRx(void *pdata) {

INT8U err;

pdata = pdata; for (;;) { .

err = OSMboxPost(CommMbox, (void *)&CommRxBuf[0]); .

参考手册

} }

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

OSMboxQuery( )

INT8U OSMboxQuery(OS_EVENT *pevent, OS_MBOX_DATA *pdata);

所属文件 调用者 开关量 OS_MBOX_EN 任务或中断 OSMboxQuery()函数用来取得消息邮箱的信息。用户程序必须分配一个OS_MBOX_DATA的数据结构,该结构用来从消息邮箱的事件控制块接受数据。通过调用OSMboxQuery()函数可以知道任务是否在等待消息以及有多少个任务在等待消息,还可以检查消息邮箱现在的消息。

OS_MBOX.C 参数

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

Pdata 是指向OS_MBOX_DATA数据结构的指针,该数据结构包含下述成员: Void *OSMsg; /* 消息邮箱中消息的复制 */ INT8U OSEventTbl[OS_EVENT_TBL_SIZE]; /*消息邮箱等待队列的复制*/ INT8U OSEventGrp;

返回值

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

? OS_ERR_EVENT_TYPE :pevent 不是指向消息邮箱的指针。

注意/警告

必须先建立消息邮箱,然后使用。

范例:

OS_EVENT *CommMbox;

void Task (void *pdata) {

OS_MBOXDATA mbox_data; INT8U err;

pdata = pdata; for (;;) { .

err = OSMboxQuery(CommMbox, &mbox_data); if (err == OS_NO_ERR) {

. /* 如果mbox_data.OSMsg为非空指针,说明消息邮箱非空*/ }