本帖最后由 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;
}
} |