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

[复制链接]
2525|4
 楼主| 1ocean1 发表于 2007-3-14 23:30 | 显示全部楼层 |阅读模式
Queue-&gtMaxData&nbsp;=&nbsp;(SizeOfBuf&nbsp;-&nbsp;(uint32)(((DataQueue&nbsp;*)0)-&gtBuf))&nbsp;/&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sizeof(QUEUE_DATA_TYPE);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;计算队列可以存储的数据数目&nbsp;*/<br /><br />其中(uint32)(((DataQueue&nbsp;*)0)-&gtBuf))是什么意思?<br />是指空结构体指针指向结构体中的成员吗?<br /><br />参考内容:<br />typedef&nbsp;struct&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;QUEUE_DATA_TYPE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*Out;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;指向数据输出位置&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;QUEUE_DATA_TYPE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*In;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;指向数据输入位置&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;QUEUE_DATA_TYPE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*End;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;指向Buf的结束位置&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;uint16&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NData;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;队列中数据个数&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;uint16&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MaxData;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;队列中允许存储的数据个数&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;uint8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(*&nbsp;ReadEmpty)();/*&nbsp;读空处理函数*/&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;uint8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(*&nbsp;WriteFull)();/*&nbsp;写满处理函数&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;QUEUE_DATA_TYPE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Buf[1];&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;存储数据的空间&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br />}&nbsp;DataQueue;<br /><br />SizeOfBuf是Buf的字节长度。<br />QUEUE_DATA_TYPE是指可定义的数据类型可以Uint8,Uint32,等。<br />Queue是DataQueue型结构体。<br /><br /><br />
high 发表于 2007-3-14 23:37 | 显示全部楼层

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

  
 楼主| 1ocean1 发表于 2007-3-14 23:39 | 显示全部楼层

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

这个语法没有问题吗?<br />(uint32)(((DataQueue&nbsp;*)0)-&gtBuf))&nbsp;
high 发表于 2007-3-14 23:45 | 显示全部楼层

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

如果去访问(((DataQueue&nbsp;*)0)-&gtBuf))那就问题大了。这里只是使用了它的值。它的值代表了buf成员对结构体头位置的偏移。<br />
 楼主| 1ocean1 发表于 2007-3-14 23:50 | 显示全部楼层

谢谢

终于明白了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

7

主题

79

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部