ahzhq
驱动牛犊
驱动牛犊
  • 注册日期2003-05-23
  • 最后登录2006-11-13
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1610回复:10

吐血给分!!!关于使用EasyD12.dll 访问 D12 USB的速度问题

楼主#
更多 发布于:2003-06-24 08:48
开发环境WINXP + VC6.0


代码:
//测试连续读取端点2数据100次需要多少时间
void CUsbD12Test1Dlg::OnButton1()
{
//定义缓冲区变量
unsigned char databuff[64];

//取读取端点2前的时间
CTime time=CTime::GetCurrentTime();
m_1=time.Format(\"20%y-%m-%d %H:%M:%S\");
UpdateData(false);
//读取端点2数据到缓冲区
//连续读100次
for (int i=0;i<100;i++)
DWORD st=ReadPort2(databuff,64);
//取读取100次后的时间
time=CTime::GetCurrentTime();
m_2=time.Format(\"20%y-%m-%d %H:%M:%S\");
UpdateData(false);
}

测试结果:
  读100次 需要7秒钟

结论:
由于读取端点2每次读取64个字节,所以平均速率为:
  64Byte * 100 / 7s = 914 (Byte/s)
这样的速度实在太慢了,1KByte/s都达不到.

这是为什么?问题在哪里?
是使用EasyD12.dll访问D12 USB的造成的吗?
还是有其他原因!!!!

各位大哥救救我!!!!  我折腾了很久了总是没有答案.
感谢!感谢!感谢!
jinghuiren
驱动巨牛
驱动巨牛
  • 注册日期2002-06-01
  • 最后登录2008-10-27
  • 粉丝0
  • 关注0
  • 积分291分
  • 威望460点
  • 贡献值0点
  • 好评度428点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-06-24 12:55
你把64扩大100倍再试一下,也就是说一次读6.4k,看看是否有起色。最大值一般为65535,只要不超过这个值你都可以试。另外,你计算时间的方式挺特别,我喜欢用下面的方法计算时间,我想你的时间不是太精确。你可以试试用timeGetTime()或者GetTickCount(),使用方法:
DWORD Time, Time0, Time1;
Time0 = timeGetTime();//开始计算时间
.
.
.
.
Time1 = timeGetTime();//计时结束

Time = Time1 - Time0;//耗费的总时间。
两个函数的返回的都是毫秒,这两个函数为1.1计算时间是比较好的。
ahzhq
驱动牛犊
驱动牛犊
  • 注册日期2003-05-23
  • 最后登录2006-11-13
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-06-24 16:26
谢谢jinghuiren.

我将缓冲区改为64000

unsigned char databuff[64000];
ReadPort2(databuff,64000);

但是执行时有错误提示:
端口打开失败!

我查看了databuff[64000]里的数据,databuff只有前面的1024个 得到端点2的数据.
也就是说
unsigned char databuff[1024];
ReadPort2(databuff,1024);
就可以正确了.
大于1024就出错.

这样的速率也时远远不够的,只有1K左右.

请问这是怎么回事呢?
我在98下和XP下得到的都是这个结果.

我用的是D12 ,不知道是什么地方会影响到速率这么低?

ahzhq
驱动牛犊
驱动牛犊
  • 注册日期2003-05-23
  • 最后登录2006-11-13
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-06-24 17:00
我找到答案了。
问题不在我这边,在c51那边。
谢谢。分都给你。
jinghuiren
驱动巨牛
驱动巨牛
  • 注册日期2002-06-01
  • 最后登录2008-10-27
  • 粉丝0
  • 关注0
  • 积分291分
  • 威望460点
  • 贡献值0点
  • 好评度428点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-06-24 17:02
你有应用程序的源代码吗?
有的话可以找到相应的位置把这个限制去掉就行了,你可以纪录一下瞬时速度是多少,也就是没发送64000你就记录一下,也许会快一些,其它的我就不太明白了,我没做过d12的。

还有就是你用的是什么传输方式,是bulk吗?如果是bulk的话不应该这么慢的,他们最低的还几十k呢,你可以再等一下让他们来回答,而且关于这个讨论的贴子前几天还有,你往前翻几页看看。
jinghuiren
驱动巨牛
驱动巨牛
  • 注册日期2002-06-01
  • 最后登录2008-10-27
  • 粉丝0
  • 关注0
  • 积分291分
  • 威望460点
  • 贡献值0点
  • 好评度428点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2003-06-24 17:04
呵呵,问题解决了就好 :D
ahzhq
驱动牛犊
驱动牛犊
  • 注册日期2003-05-23
  • 最后登录2006-11-13
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2003-06-24 17:05
我怎么把分给你呢?
我第一次问问题.
jinghuiren
驱动巨牛
驱动巨牛
  • 注册日期2002-06-01
  • 最后登录2008-10-27
  • 粉丝0
  • 关注0
  • 积分291分
  • 威望460点
  • 贡献值0点
  • 好评度428点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2003-06-24 20:29
你的第一贴下面那排按钮里有一个给分键,单击它!!! :D
littleleo_78
驱动牛犊
驱动牛犊
  • 注册日期2003-06-19
  • 最后登录2004-02-03
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2003-06-24 21:03
ahzhq,请问你使用的easyd12.dll动态连接库是随开发板购买的吗?
如果我用这个库往自己做的设备上传数,在win2000还要驱动吗?
ahzhq
驱动牛犊
驱动牛犊
  • 注册日期2003-05-23
  • 最后登录2006-11-13
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2003-06-25 08:11
好的.马上给分!谢谢


是一起购买的,要驱动!
ahzhq
驱动牛犊
驱动牛犊
  • 注册日期2003-05-23
  • 最后登录2006-11-13
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2003-06-25 09:34
easyd12.dll 提供四个函数的接口随开发板一起提供,在WIN98,2K 下有*.sys驱动提供,但XP下要自己去找!当然也可以自己用VC DDK 生成DLL,比较麻烦!
游客

返回顶部