打印
[ZLG-ARM]

看UCOS中间件,数据队列的时候有个问题,希望谁来回答一下。

[复制链接]
1842|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
1ocean1|  楼主 | 2007-3-14 23:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
Queue->MaxData = (SizeOfBuf - (uint32)(((DataQueue *)0)->Buf)) / 
                         sizeof(QUEUE_DATA_TYPE);      /* 计算队列可以存储的数据数目 */

其中(uint32)(((DataQueue *)0)->Buf))是什么意思?
是指空结构体指针指向结构体中的成员吗?

参考内容:
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;

SizeOfBuf是Buf的字节长度。
QUEUE_DATA_TYPE是指可定义的数据类型可以Uint8,Uint32,等。
Queue是DataQueue型结构体。


相关帖子

沙发
high| | 2007-3-14 23:37 | 只看该作者

这是计算结构体中Buf之前的成员所占用的空间大小

使用特权

评论回复
板凳
1ocean1|  楼主 | 2007-3-14 23:39 | 只看该作者

LS的大哥能否详细一点小弟愚昧。

这个语法没有问题吗?
(uint32)(((DataQueue *)0)->Buf)) 

使用特权

评论回复
地板
high| | 2007-3-14 23:45 | 只看该作者

没有问题,这是一种经验和技巧。

如果去访问(((DataQueue *)0)->Buf))那就问题大了。这里只是使用了它的值。它的值代表了buf成员对结构体头位置的偏移。

使用特权

评论回复
5
1ocean1|  楼主 | 2007-3-14 23:50 | 只看该作者

谢谢

终于明白了。

使用特权

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

本版积分规则

7

主题

79

帖子

0

粉丝