一直在等待数据

[复制链接]
 楼主| chuxh 发表于 2011-2-19 20:27 | 显示全部楼层 |阅读模式
用函数 DeviceIoControl (hDeviceR,
     IOCTL_EZUSB_BULK_READ,
         &bulkControlR,
         sizeof(BULK_TRANSFER_CONTROL),
         &buf[0],
         len,
         &nBytes,
         NULL);
读取数据,当读不到数据时,进程就会阻塞,一直等到FIFO中有数据时此函数才能执行完,要不然一直在等待数据,仿佛死机般,而我想让其等待几秒后,就跳出,请问怎样才能实现!
小小猫咪 发表于 2011-2-19 20:42 | 显示全部楼层
为什么不用XferData() API进行数据传输呢?
llljh 发表于 2011-2-19 21:01 | 显示全部楼层
对头,再加个TimeOut()限定时间。
 楼主| chuxh 发表于 2011-2-19 21:17 | 显示全部楼层
没看到过XferData() API啊,能详细说下吗?
zwll 发表于 2011-2-19 21:27 | 显示全部楼层
CyAPI.pdf里有关XferData的说明
llljh 发表于 2011-2-19 21:35 | 显示全部楼层
对的,CyAPI.pdf文件有详细的说明
dqyubsh 发表于 2011-2-19 21:39 | 显示全部楼层
我对这个问题也很困惑。主机一直读设备的数据,当设备没有新数据的时候,设备应该返回什么呢?
1,返回一个USB的标记,诸如NAK一类的,不知道USB哪个标记可以做这事?
2,等待设备超时,返回零长度。这个时间段设备就死那了,效率太低了!
3,固件里弄个通讯缓冲区,不管有没有新数,都返回该缓冲区数据,由上层软件判断哪些是新数据。这样通讯线上有大量垃圾数据。
4,定义一个数据协议,每次返回的数据前边加上数据长度,有新数就是 数据长度+数据,没新数就是 长度=0。这样每次通讯的数据可能不等长,无形中增加了主机解码的难度,固件也不好写。
5,在4的基础上,可能要增加环形缓冲区。。。。

关于通讯协议,大家有什么好的建议?
 楼主| chuxh 发表于 2011-2-19 21:44 | 显示全部楼层
我们没用CyAPI这个库
juventus9554 发表于 2011-2-19 21:55 | 显示全部楼层
用个线程实现,可能会好些。
zwll 发表于 2011-2-19 22:06 | 显示全部楼层
还可以通过CYAPI数据手册中的一个更改时间的函数,好像是timeout()来更改等待的时间也可以。
zyf部长 发表于 2011-2-19 22:17 | 显示全部楼层
给你个好文档看看

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
 楼主| chuxh 发表于 2011-2-21 20:34 | 显示全部楼层
多谢楼上,请问CyAPI.lib,CyAPI.h,CyUsb.sys等这些在哪里能下载到?
pangb 发表于 2011-2-21 20:44 | 显示全部楼层
CY7C68013有两个版本的驱动程序
 楼主| chuxh 发表于 2011-2-21 20:56 | 显示全部楼层
CY7C68013有两个版本的驱动程序
pangb 发表于 2011-2-21 20:44
pangb 发表于 2011-2-21 21:04 | 显示全部楼层
早期版本开放源代码但不支持异步通信,可通过多线程模拟异步通信.
pangb 发表于 2011-2-21 21:04 | 显示全部楼层
最新版本的驱动程序不开放源代码但支持异步通信,可设超时等待时间
zyf部长 发表于 2011-2-21 21:24 | 显示全部楼层
具体的可去cypress官方网站瞅瞅,有一个驱动开发包.名曰:Cypress Suite USB 3.4.1
pangb 发表于 2011-2-21 21:28 | 显示全部楼层
对,CyAPI.lib是基于新版本驱动的
 楼主| chuxh 发表于 2011-2-21 21:38 | 显示全部楼层
问题已解决,原来我是用的老版本的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

936

主题

11296

帖子

2

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