whmjack
驱动小牛
驱动小牛
  • 注册日期2003-09-17
  • 最后登录2007-04-26
  • 粉丝0
  • 关注0
  • 积分290分
  • 威望29点
  • 贡献值0点
  • 好评度29点
  • 原创分0分
  • 专家分0分
阅读:1199回复:5

<PDIUSBD12固件编程与驱动开发>一书中的一个小问题

楼主#
更多 发布于:2004-02-27 10:25
在书的p69页的主端点out程序中有这么几句:
D12_ReadLastTransactionStatus(4);
eps=D12_ReadEndpoint(4);
eps&=0x60;
len=D12_ReadEndpoint(4,64,epbuf);
if(eps==0x60)
 len=D12_ReadEndpoint(4,64,epbuf);
大家看看,这段程序是用于读缓冲区里的数据,第一个缓存区读完后再读第二个缓冲区,但是epbuf的指针都没有改动,那么第二个D12_ReadEndpoint读出来的数据就把第一次D12_ReadEndpoint读出的数据给冲掉了,是不是这样的呢?
还有再第60页的D12_ReadEndPoint()函数中有这么一句
outportb(d12_command,0x80+endp);
i=inportf(D12_data);
if(endp==2)
{
   if(i==0x60)
     bEppflags.bits.ep1buf_full=1;
   else
     beppflags.bits.ep1buf_full=0;
}
if(endp==4)
{
   if(i==0x60)
     bEppflags.bits.ep2buf_full=1;
   else
     beppflags.bits.ep2buf_full=0;
}
据我了解,d12只有主端点(索引4,5)才是双缓冲,为什么endp=2还要这样判断(i==0x60)?


zmwk
驱动中牛
驱动中牛
  • 注册日期2001-05-15
  • 最后登录2009-04-05
  • 粉丝0
  • 关注0
  • 积分59分
  • 威望51点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-03-03 11:59
epbuf肯定被冲了。但这和你的应用模式有关。在有些协议中要求保留最新的东西,有些协议允许丢包。相信这点大家是知道的。

我没有仔细研读过周立功的东西,粗略看过。
基本上是入门使用的AS-IS代码。有些PHILIPS原厂代码中的粗糙之处也彻底搬过来了。举例如下:
1。有的函数声明了变量,并未使用。
2。采用了C语言中结构体缩短位数据(使用":"的语法)。这种语法的效率不高。bEppflags结构就是这样的。如果实际使用,最好使用bit操作,虽然不如结构漂亮,但底层代码应该考虑。
3。多数中断的开关(EA)值得推敲。51的同级中断是不允许重入的,所以中断未必需要那么频繁的开关。

最后,再为周立功说句公道话:他的代码似乎是考虑微机与单片机兼容的,所谓顾此失彼,也就难免了。

关于问题二,得批评Philips几句,有些东西似乎文档里说得有点模糊,有人声称端点1也是双缓冲的。但无论如何,代码那样写不会出问题,最多是看着不舒服。
A strong man can save himself. A great man can save another.
holyrock
驱动牛犊
驱动牛犊
  • 注册日期2003-12-27
  • 最后登录2005-08-21
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-03-02 22:24
    这两个问题我也不太明白,这里的endp=2不是主端点,应该是端点1的OUT,endpointstatus寄存器里的buffer0,buffer1具体指什么?
    第一个问题,每次len=D12_ReadEndpoint(4,64,epbuf);不都是将epbuf首址传出去,从首址开始写吗?clementzhao网友提到的epbuf的指针是什么?
    大家讨论一下好吗?
clementzhao
驱动大牛
驱动大牛
  • 注册日期2003-05-08
  • 最后登录2009-02-20
  • 粉丝0
  • 关注0
  • 积分28分
  • 威望63点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
地板#
发布于:2004-02-27 16:44
主段点就是段点2。
epbuf的指针都没有改动就是连续读2个BUF啊,有什么问题?如果epbuf的指针RESET了才会冲掉。
yangzg
驱动牛犊
驱动牛犊
  • 注册日期2004-01-02
  • 最后登录2004-10-12
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2004-02-27 16:12
关注
znsoft
管理员
管理员
  • 注册日期2001-03-23
  • 最后登录2023-10-25
  • 粉丝300
  • 关注6
  • 积分910分
  • 威望14796点
  • 贡献值7点
  • 好评度2410点
  • 原创分5分
  • 专家分100分
  • 社区居民
  • 最爱沙发
  • 社区明星
5楼#
发布于:2004-02-27 11:23
这个去周立功问估计好点:)
http://www.zndev.com 免费源码交换网 ----------------------------- 软件创造价值,驱动提供力量! 淡泊以明志,宁静以致远。 ---------------------------------- 勤用搜索,多查资料,先搜再问。
游客

返回顶部