-
查询EMC DataDomain 2500存储设备维护手册中关于信号量状态的信息
资源介绍
程序清单 L6.13 查询一个信号量的状态
INT8U OSSemQuery (OS_EVENT *pevent, OS_SEM_DATA *pdata)
{
INT8U i;
INT8U *psrc;
INT8U *pdest;
OS_ENTER_CRITICAL();
if (pevent->OSEventType != OS_EVENT_TYPE_SEM) { (1)
OS_EXIT_CRITICAL();
return (OS_ERR_EVENT_TYPE);
}
pdata->OSEventGrp = pevent->OSEventGrp; (2)
psrc = &pevent->OSEventTbl[0];
pdest = &pdata->OSEventTbl[0];
for (i = 0; i < OS_EVENT_TBL_SIZE; i++) {
*pdest++ = *psrc++;
}
pdata->OSCnt = pevent->OSEventCnt; (3)
OS_EXIT_CRITICAL();
return (OS_NO_ERR);
}
6.6 邮箱
邮箱是µC/OS-II中另一种通讯机制,它可以使一个任务或者中断服务子程序向另一个任务
发送一个指针型的变量。该指针指向一个包含了特定“消息”的数据结构。为了在µC/OS-II中
使用邮箱,必须将 OS_CFG.H中的 OS_MBOX_EN常数置为 1。
使用邮箱之前,必须先建立该邮箱。该操作可以通过调用 OSMboxCreate()函数来完成(见
下节),并且要指定指针的初始值。一般情况下,这个初始值是 NULL,但也可以初始化一个邮
箱,使其在最开始就包含一条消息。如果使用邮箱的目的是用来通知一个事件的发生(发送一
条消息),那么就要初始化该邮箱为 NULL,因为在开始时,事件还没有发生。如果用户用邮箱
来共享某些资源,那么就要初始化该邮箱为一个非 NULL的指针。在这种情况下,邮箱被当成一
个二值信号量使用。
µC/OS-II 提供了 5 种对邮箱的操作:OSMboxCreate(),OSMboxPend(),OSMboxPost(),
OSMboxAccept()和 OSMboxQuery()函数。图 F6.6描述了任务、中断服务子程序和邮箱之间的关