节选自queue.c文件<br />/************************************************************<br />** 函数名称: QueueCreate<br />** 功能描述: 初始化数据队列<br />** 输 入: Buf :为队列分配的存储空间地址<br />** SizeOfBuf:为队列分配的存储空间大小(字节)<br />** ReadEmpty:为队列读空时处理程序<br />** WriteFull:为队列写满时处理程序<br />** 输 出: NOT_OK:参数错误<br />** QUEUE_OK:成功<br />** 全局变量: 无<br />** 调用模块: OS_ENTER_CRITICAL,OS_EXIT_CRITICAL<br />********************************************************/<br />uint8 QueueCreate(void *Buf,uint32 SizeOfBuf,uint8 (* ReadEmpty)(),uint8 (* WriteFull)())<br />{<br /> DataQueue *Queue;<br /> uint8 k1,k2;<br /> if (Buf != NULL && SizeOfBuf >= (sizeof(DataQueue))) /* 判断参数是否有效 */<br /> {<br /> Queue = (DataQueue *)Buf;<br /><br /> OS_ENTER_CRITICAL();<br /> /* 初始化结构体数据 */<br /> <br /> Queue->MaxData = (SizeOfBuf - (uint32)(((DataQueue *)0)->Buf)) / sizeof(QUEUE_DATA_TYPE); <br /><br /> /* 计算队列可以存储的数据数目 */<br /> Queue->End = Queue->Buf + Queue->MaxData; /* 计算数据缓冲的结束地址 */<br /> Queue->Out = Queue->Buf;<br /> Queue->In = Queue->Buf;<br /> Queue->NData = 0;<br /> Queue->ReadEmpty = ReadEmpty;<br /> Queue->WriteFull = WriteFull;<br /><br /> OS_EXIT_CRITICAL();<br /><br /> return QUEUE_OK;<br /> }<br /> else<br /> {<br /> return NOT_OK;<br /> }<br />}<br /><br /><br />---------------------------------------------------------------<br />请问这句要如何理解?<br />Queue->MaxData = (SizeOfBuf - (uint32)(((DataQueue *)0)->Buf)) / sizeof(QUEUE_DATA_TYPE);<br /><br />相关定义如下:<br /><br />#ifndef QUEUE_DATA_TYPE<br />#define QUEUE_DATA_TYPE uint8<br />#endif<br /><br />//-----------------------------------------------------------------------------<br />typedef struct {<br /> QUEUE_DATA_TYPE *Out; /* 指向数据输出位置 */<br /> QUEUE_DATA_TYPE *In; /* 指向数据输入位置 */<br /> QUEUE_DATA_TYPE *End; /* 指向Buf的结束位置 */<br /> uint16 NData; /* 队列中数据个数 */<br /> uint16 MaxData; /* 队列中允许存储的数据个数 */<br /> <br /> uint8 (* ReadEmpty)(); /* 读空处理函数 */<br /> uint8 (* WriteFull)(); /* 写满处理函数 */<br /> QUEUE_DATA_TYPE Buf[1]; /* 存储数据的空间 */<br />} DataQueue;<br /> |
|