qifeng8
驱动小牛
驱动小牛
  • 注册日期2003-08-26
  • 最后登录2013-01-31
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望80点
  • 贡献值0点
  • 好评度21点
  • 原创分0分
  • 专家分0分
阅读:1843回复:17

怪,请教大家,读D12时,怎么老是读不出啊??(顶就有分)

楼主#
更多 发布于:2004-10-12 09:35
bResult = WriteFile(hand,Buffer,16,&nBytes,NULL);
if (bResult != TRUE)
{
     DeviceIoControl (hand,IOCTL_D12_RESET_PIPE,0,0,0,0,&nBytes,NULL);
ShowMessage("写设备失败");
          CloseHandle(hand);
          return;
}
        memset(Buffer,0,sizeof(Buffer));
        //我这里读不出东西啊??
        bResult = ReadFile(hand,
                Buffer,
                16,
                &nBytes,
                NULL);
        if (bResult != TRUE)
        {
                DeviceIoControl(hand,IOCTL_D12_RESET_PIPE,0,0,0,0,&nBytes,NULL);
                ShowMessage("读设备失败");
        }
       .................
我打开设备正确,然后用Bus Hound来观察数据
写的时候数据是:  D0 00 00 31 00 00 00 93 00
                    00 00 00 00 00 00 00 00
读的时候:        D0 00 00 00 00 00 00 00 00
                    00 00 00 00 00 00 00 00

这就怪了,读的时候Bus hound不是应该显示  DI  ,怎么实际还是显示D0啊???
还有  我只要在readfile前,对Buffer设置成特殊字符,那么Bus hound就会在执行完readfile后显示出那些特殊字符,,,,,,,,,不懂?谁能帮我看看啊???
qifeng8
驱动小牛
驱动小牛
  • 注册日期2003-08-26
  • 最后登录2013-01-31
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望80点
  • 贡献值0点
  • 好评度21点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-10-15 11:00
可以了,结贴,感谢大家的帮助
my_your_chang
驱动牛犊
驱动牛犊
  • 注册日期2004-10-14
  • 最后登录2005-04-10
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-10-14 19:30
初来乍到的,就是为了学一点东西。呵呵。几位前辈的话很有借鉴意义啊。学习,学习。谢谢!
努力
xjLegend
驱动小牛
驱动小牛
  • 注册日期2002-11-04
  • 最后登录2005-06-08
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2004-10-14 19:16
不是的,bResult = ReadFile(hand1,
                Buffer,
                1,
                &nBytes,
                NULL);
现在还是不行,
谁有类似的程序,救哥们一把,qifeng8@163.com


这个要和外设配合的,若此时 外设没有发送数据,你的读当然不行,死等直至超时。
我想要点分,这样才有成就感嘛!
qifeng8
驱动小牛
驱动小牛
  • 注册日期2003-08-26
  • 最后登录2013-01-31
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望80点
  • 贡献值0点
  • 好评度21点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2004-10-14 16:19
不是的,bResult = ReadFile(hand1,
                Buffer,
                1,
                &nBytes,
                NULL);
现在还是不行,
谁有类似的程序,救哥们一把,qifeng8@163.com
wly76
驱动小牛
驱动小牛
  • 注册日期2004-08-12
  • 最后登录2008-04-24
  • 粉丝0
  • 关注0
  • 积分30分
  • 威望3点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2004-10-14 16:14
是不是读回来的字节数不够。
qifeng8
驱动小牛
驱动小牛
  • 注册日期2003-08-26
  • 最后登录2013-01-31
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望80点
  • 贡献值0点
  • 好评度21点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2004-10-14 15:48
我用的是中断方式(同步方式),现在我读写的时候打开的端口不一样了,可是在readfile时,出现了死等现象,,,怪了
qifeng8
驱动小牛
驱动小牛
  • 注册日期2003-08-26
  • 最后登录2013-01-31
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望80点
  • 贡献值0点
  • 好评度21点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2004-10-13 16:18
谁有例程,能不能发给我啊qifeng8@163.com

我看了d12test中ReadWrite(),他是打开了不同的管道,我造做的话,readfile就在那里死等了.
我用usb调试工具跟踪,writefile正确发出数据了
wly76
驱动小牛
驱动小牛
  • 注册日期2004-08-12
  • 最后登录2008-04-24
  • 粉丝0
  • 关注0
  • 积分30分
  • 威望3点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2004-10-13 14:48
是的:以下是d12test中ReadWrite()里面的两个语句
CloseHandle(hRead);
CloseHandle(hWrite);
很清楚的说明了这一点。请参考d12test的源代码。
qifeng8
驱动小牛
驱动小牛
  • 注册日期2003-08-26
  • 最后登录2013-01-31
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望80点
  • 贡献值0点
  • 好评度21点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2004-10-13 13:16
那是不是说,写和读要用不同的句柄打开啊
wly76
驱动小牛
驱动小牛
  • 注册日期2004-08-12
  • 最后登录2008-04-24
  • 粉丝0
  • 关注0
  • 积分30分
  • 威望3点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2004-10-13 11:04
关于概念上的一点补充,对于d12来说只有端点,对于上位机应用程序来说只有管道,读写端点各对应于1个管道,zlg的d12test是同步方式的,dll我没看过源码,不知道。createfile与divicantrol都可以设置工作方式
qifeng8
驱动小牛
驱动小牛
  • 注册日期2003-08-26
  • 最后登录2013-01-31
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望80点
  • 贡献值0点
  • 好评度21点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2004-10-12 20:21
刚刚查了一下书,说异步同步是由createfile()函数决定的,设置FILE_FLAG_OVERLAPPED就是异步,不然的话,就是同步,我看周立功的测试程序里好像也没设置FILE_FLAG_OVERLAPPED
qifeng8
驱动小牛
驱动小牛
  • 注册日期2003-08-26
  • 最后登录2013-01-31
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望80点
  • 贡献值0点
  • 好评度21点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2004-10-12 19:32
是不是说,要不同管道,D12的管道1是不是支持读写的?
xjLegend
驱动小牛
驱动小牛
  • 注册日期2002-11-04
  • 最后登录2005-06-08
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2004-10-12 17:53
错误之处在于读写不是同一个管道,管道只能是单向的。你对写管道进行读 当然什么也读不出来。

得到的句柄hand 对读和写的open_file()参数是不一样的。
我想要点分,这样才有成就感嘛!
wly76
驱动小牛
驱动小牛
  • 注册日期2004-08-12
  • 最后登录2008-04-24
  • 粉丝0
  • 关注0
  • 积分30分
  • 威望3点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
14楼#
发布于:2004-10-12 17:08
是有点奇怪,你知道d12test.dll内部是同步还是异步吗,这里边是
同步方式,会不会是d12test.dll是异步方式,导致配合不协调。
=======仅供参考
qifeng8
驱动小牛
驱动小牛
  • 注册日期2003-08-26
  • 最后登录2013-01-31
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望80点
  • 贡献值0点
  • 好评度21点
  • 原创分0分
  • 专家分0分
15楼#
发布于:2004-10-12 13:54
怪就怪在这里,readfile没有返回错误啊,它返回ture,但是没有数据读出来
也不应该是是固件问题,因为我得设备用EasyD12.dll,就可以成功啊



D0 00 00 31 00 00 00 93 00     //writefile
   00 00 00 00 00 00 00 00
D0 00 00 00 00 00 00 00 00     //readfile
   00 00 00 00 00 00 00 00
wly76
驱动小牛
驱动小牛
  • 注册日期2004-08-12
  • 最后登录2008-04-24
  • 粉丝0
  • 关注0
  • 积分30分
  • 威望3点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
16楼#
发布于:2004-10-12 12:43
看你的代码应该有提示信息,memset(Buffer,0,sizeof(Buffer));
//我这里读不出东西啊??
这里也不是读数据的地方啊。if (bResult != TRUE)
{
DeviceIoControl(hand,IOCTL_D12_RESET_PIPE,0,0,0,0,&nBytes,NULL);
ShowMessage("读设备失败");
}
如果读设备失败这里应该提示,如果用的是D12TEST再这下面还应该
有一个读通道失败的提示。如果没有提示失败,应该是固件没有把
数据写近单片机的缓冲区。
qifeng8
驱动小牛
驱动小牛
  • 注册日期2003-08-26
  • 最后登录2013-01-31
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望80点
  • 贡献值0点
  • 好评度21点
  • 原创分0分
  • 专家分0分
17楼#
发布于:2004-10-12 09:55
补充一点:我是打开hand = open_file((LPCSTR)"PIPE01");后进行读写操作的
游客

返回顶部