ez-u fxcy使用心得传输.pdfVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多

今天有空写以下bulk传输。bulk的话,cy开发包里有个例子cybulk写的很好,

不过说实话,那个太烦琐了,基本上我们自己只用到其中的一部分,另外,就是

局限性很大,例如它只是512字节的倍数,对于任意数目的字节貌似是不支持的,数

据会不同步。

为了提高传输速度与效率,一般要把数据放在另外一个线程,单独开启一个

bulk线程。恩,前面的还是稍微提一下,在打开USB,设定端点后,紧接着开启

线程,进行bulk:

if(USBDevice-IsOpen()){//如果USB设备已经打开

bLooping=true;//线程循环标志为真

XferThread=AfxBeginThread(XferLoop,this);//启动

线程

}

然后是线程中的处理,在这里上位机用异步接收,创建异步:

OVERLAPPEDinOvLap;

CVC_SimpleCyapiDlg*dlg=(CVC_SimpleCyapiDlg*)params;//

使该线程可CBulkLoopDlg类的所有公有成员

inOvLap.hEvent=CreateEvent(NULL,false,false,

CYUSB_IN);

线程循环:

boolsuccess;

dlg-InEndpt-TimeOut=120;

for(;dlg-bLooping;){//线程循环,直到循环标志blooping为假

LONGinlen;

inlen=512;

UCHAR*inContext=

dlg-InEndpt-BeginDataXfer(inData,inlen,inOvLap);

dlg-InEndpt-WaitForXfer(inOvLap,TimeOut);

success=dlg-InEndpt-FinishDataXfer(inData,inlen,

inOvLap,inContext);

if(!success)dlg-bLooping=false;

}

主要是三步,调用三个函数BeginDataXfer,WaitForXfer,FinishDataXfer。按

照手册上说的,BeginDataXfer发起异步传输,并且立即返回。也就是说,发起

此次的inlen后,并不会等inlen传输完,而是立即开始下一次inlen字节传输;

WaitForXfer,异步传输最大等待时间;FinishDataXfer,到这里才开始真正的

写内存,将读到的数写到缓冲区indata中。

最后,完了别忘记释放对象:

CloseHandle(inOvLap.hEvent);

delete[]inData;

另外,如果要传输非512字节整数倍的数据,而且不是一次传输完的话,在

线程中用SetXferSize()重新设置传输大小,否则会导致数据不同步。

文档评论(0)

四季豆 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档