| 
 
| 本帖最后由 21ID 于 2012-6-7 09:57 编辑 
 数组定义:int32s  UART1SendBuf[UART1_SEND_QUEUE_LENGTH/sizeof(int32s)];
 上面的定义数组长度为什么这样用?
 
 函数调用:QueueCreate((void *)UART1SendBuf, sizeof(UART1SendBuf), NULL, (int8u (*)())Uart1WriteFull);
 
 函数定义:int8u QueueCreate(void *Buf, int32u SizeOfBuf, int8u (* ReadEmpty)(), int8u (* WriteFull)())
 {
 #if OS_CRITICAL_METHOD == 3
 OS_CPU_SR  cpu_sr;
 #endif
 DataQueue *Queue;
 
 if (Buf != NULL && SizeOfBuf >= (sizeof(DataQueue)))        /* 判断参数是否有效 */
 {
 Queue = (DataQueue *)Buf;这里为什么可以进行类型转换
 OS_ENTER_CRITICAL();
 /* 初始化结构体数据 */
 Queue->MaxData = (SizeOfBuf - (int32u)(((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;
 }
 
 }
 | 
 |