打印
[ZLG-ARM]

(uint32)(((DataQueue *)0)->Buf

[复制链接]
1720|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
wyhnpu|  楼主 | 2007-1-4 10:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在数据队列创建函数
        uint8 QueueCreate(void *Buf,
                          uint32 SizeOfBuf,
                          uint8 (* ReadEmpty)(),
                          uint8 (* WriteFull)()
                          )
{
    DataQueue *Queue;
    
    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,试问一下(uint32)(((DataQueue *)0)->Buf该如何理解?

相关帖子

沙发
wyhnpu|  楼主 | 2007-1-6 20:14 | 只看该作者

吃饭的路上突然明白了,很巧妙。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

5

主题

22

帖子

0

粉丝