5623|8

58

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

如何理解块传输方式代码 [复制链接]


对于块传输,看到书上常用的方式如下:

bc 是数据的长度

                  UCHAR *inContext = USBDevice->BulkInEndPt->BeginDataXfer(inbuf,bc,&inOvLap);
                  UCHAR *outContext = USBDevice->BulkOutEndPt->BeginDataXfer(outbuf,bc,&outOvLap);

                  USBDevice->BulkOutEndPt->WaitForXfer(&outOvLap,100);
                  USBDevice->BulkInEndPt->WaitForXfer(&inOvLap,100);

                  Success = USBDevice->BulkOutEndPt->FinishDataXfer(outbuf,bc,&outOvLap,outContext);
                  Success = USBDevice->BulkInEndPt->FinishDataXfer(inbuf,bc,&inOvLap,inContext);

                  CloseHandle(outOvLap.hEvent);
                  CloseHandle(inOvLap.hEvent);

1. 如何理解这段代码?
2. 它到底是接受还是发送呢?如果是write data写数据该如何用呢?

最新回复

需要配对使用吗?  详情 回复 发表于 2010-1-18 16:56
点赞 关注

回复
举报

65

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
帮顶下,MARK.
 
 

回复

64

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
BeginDataXfer是非阻塞式的传输,也就是调用以后马上返回。
只到WaitForXfer得到传输完成信号后,FinishDataXfer才真正的开始写数据。

非阻塞式的传输的好处是不用阻塞其他操作的运行,在这里BeginDataXfer(inbuf,bc,&inOvLap);
开始读取bc个数据到inbuf里,当调用FinishDataXfer(inbuf,bc,&inOvLap,inContext); 时,数据才真正被写到inbuf里,同样对于outbuf也是一样的。

代码的流程就是
UCHAR *inContext = USBDevice->BulkInEndPt->BeginDataXfer(inbuf,bc,&inOvLap);
//开始接收数据到
                  UCHAR *outContext = USBDevice->BulkOutEndPt->BeginDataXfer
(outbuf,bc,&outOvLap);
//开始发送数据到
                  USBDevice->BulkOutEndPt->WaitForXfer(&outOvLap,100);
//等待发送完成
                  USBDevice->BulkInEndPt->WaitForXfer(&inOvLap,100);
//等待接收完成
                  Success = USBDevice->BulkOutEndPt->FinishDataXfer(outbuf,bc,&outOvLap,outContext);
//这里才真正将outbuf里的数据发送出
                  Success = USBDevice->BulkInEndPt->FinishDataXfer(inbuf,bc,&inOvLap,inContext);
//这里才真正将接收到的数据存储到inbuf里
                  CloseHandle(outOvLap.hEvent);
                  CloseHandle(inOvLap.hEvent);
//关闭句柄,释放资源
估计这个程序是测试发送的数据是否能够正常接收吧。
 
 
 

回复

64

帖子

0

TA的资源

一粒金砂(初级)

4
 
一楼接分的能力一流啊
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

5
 
2楼解释的不错,学习了。
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

6
 
块传输即以指定的整块数据传输为前提,要么全传要么全丢,与之相对应的就是字节传输
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

7
 

up
 
 
 

回复

82

帖子

0

TA的资源

一粒金砂(初级)

8
 
如果进行一次读那么就这样写就可以了吧?
UCHAR *inContext = USBDevice->BulkInEndPt->BeginDataXfer(inbuf,bc,&inOvLap);
USBDevice->BulkInEndPt->WaitForXfer(&inOvLap,100);
Success = USBDevice->BulkInEndPt->FinishDataXfer(inbuf,bc,&inOvLap,inContext);
CloseHandle(inOvLap.hEvent);

不是in,out必须都写吧,我还以为它们是配对使用呢?必须一个in,接着一个out。
 
 
 

回复

65

帖子

0

TA的资源

一粒金砂(初级)

9
 

需要配对使用吗?
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表