0408

来源:互联网 发布:米26重型直升机数据 编辑:程序博客网 时间:2024/04/30 01:44

查询一个邮箱的状态, OSMboxQuery()

  1. OSMboxQuery()函数使应用程序可以随时查询一个邮箱的当前状态。程序清单 L6.18是该函数的源代码。它需要两个参数:一个是指向邮箱的指针pevent。该指针是在建立该邮箱时,由OSMboxCreate()函数返回的;另一个是指向用来保存有关邮箱的信息的OS_MBOX_DATA(见uCOS_II.H)数据结构的指针pdata。在调用OSMboxCreate()函数之前,必须先定义该结构变量,用来保存有关邮箱的信息。之所以定义一个新的数据结构,是因为这里关心的只是和特定邮箱有关的内容,而非整个OS_EVENT数据结构的内容。后者还包含了另外两个域(.OSEventCnt和.OSEventType),而OS_MBOX_DATA只包含邮箱中的消息指针(.OSMsg)和该邮箱现有的等待任务列表(.OSEventTbl[]和.OSEventGrp)。  
  2. 和前面的所以函数一样,该函数也是先检查事件控制是否是邮箱[L6.18(1)]。然后,将邮箱中的等待任务列表[L6.18(2)]和邮箱中的消息[L6.18(3)]从OS_EVENT数据结构复制到OS_MBOX_DATA数据结构。  
  3.   
  4. 程序清单 L6.18 查询邮箱的状态  
  5. INT8U OSMboxQuery (OS_EVENT *pevent, OS_MBOX_DATA *pdata)  
  6. {  
  7.     INT8U  i;    INT8U *psrc;  
  8.     INT8U *pdest;  
  9.   
  10.     OS_ENTER_CRITICAL();  
  11.     if (pevent->OSEventType != OS_EVENT_TYPE_MBOX) {          (1)  
  12.         OS_EXIT_CRITICAL();  
  13.         return (OS_ERR_EVENT_TYPE);  
  14.     }  
  15.     pdata->OSEventGrp = pevent->OSEventGrp;                     (2)  
  16.     psrc              = &pevent->OSEventTbl[0];  
  17.     pdest             = &pdata->OSEventTbl[0];  
  18.     for (i = 0; i < OS_EVENT_TBL_SIZE; i++) {  
  19.         *pdest++ = *psrc++;  
  20.     }  
  21.     pdata->OSMsg      = pevent->OSEventPtr;                     (3)  
  22.     OS_EXIT_CRITICAL();  
  23.     return (OS_NO_ERR);  

0 0
原创粉丝点击