-
向邮箱发送有关emc datadomain 2500存储设备维护手册的消息
资源介绍
程序清单 L6.16 向邮箱中发送一条消息
INT8U OSMboxPost (OS_EVENT *pevent, void *msg)
{
OS_ENTER_CRITICAL();
if (pevent->OSEventType != OS_EVENT_TYPE_MBOX) { (1)
OS_EXIT_CRITICAL();
return (OS_ERR_EVENT_TYPE);
}
if (pevent->OSEventGrp) { (2)
OSEventTaskRdy(pevent, msg, OS_STAT_MBOX); (3)
OS_EXIT_CRITICAL();
OSSched(); (4)
return (OS_NO_ERR);
} else {
if (pevent->OSEventPtr != (void *)0) { (5)
OS_EXIT_CRITICAL();
return (OS_MBOX_FULL);
} else {
pevent->OSEventPtr = msg; (6)
OS_EXIT_CRITICAL();
return (OS_NO_ERR);
}
}
}
6.6.4 无等待地从邮箱中得到一个消息, OSMboxAccept()
应用程序也可以以无等待的方式从邮箱中得到消息。这可以通过程序清单 L6.17 中的
OSMboxAccept()函数来实现。 OSMboxAccept()函数开始也是检查事件控制块是否是由
OSMboxCreate()函数建立的 [L6.17(1)]。接着,它得到邮箱中的当前内容[L6.17(2)],并判断
是否有消息是可用的[L6.17(3)]。如果邮箱中有消息,就把邮箱清空[L6.17(4)],而邮箱中原
来指向消息的指针被返回给 OSMboxAccept()的调用函数[L6.17(5)]。OSMboxAccept()函数的调
用函数必须检查该返回值是否为 NULL。如果该值是 NULL,说明邮箱是空的,没有可用的消息。
如果该值是非 NULL值,说明邮箱中有消息可用,而且该调用函数已经得到了该消息。中断服务
子程序在试图得到一个消息时,应该使用 OSMboxAccept()函数,而不能使用 OSMboxPend()函数。
OSMboxAccept()函数的另一个用途是,用户可以用它来清空一个邮箱中现有的内容。