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