阅读:1843回复:17
怪,请教大家,读D12时,怎么老是读不出啊??(顶就有分)
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后显示出那些特殊字符,,,,,,,,,不懂?谁能帮我看看啊??? |
|
沙发#
发布于:2004-10-15 11:00
可以了,结贴,感谢大家的帮助
|
|
板凳#
发布于:2004-10-14 19:30
初来乍到的,就是为了学一点东西。呵呵。几位前辈的话很有借鉴意义啊。学习,学习。谢谢!
|
|
|
地板#
发布于:2004-10-14 19:16
不是的,bResult = ReadFile(hand1, 这个要和外设配合的,若此时 外设没有发送数据,你的读当然不行,死等直至超时。 |
|
|
地下室#
发布于:2004-10-14 16:19
不是的,bResult = ReadFile(hand1,
Buffer, 1, &nBytes, NULL); 现在还是不行, 谁有类似的程序,救哥们一把,qifeng8@163.com |
|
5楼#
发布于:2004-10-14 16:14
是不是读回来的字节数不够。
|
|
6楼#
发布于:2004-10-14 15:48
我用的是中断方式(同步方式),现在我读写的时候打开的端口不一样了,可是在readfile时,出现了死等现象,,,怪了
|
|
7楼#
发布于:2004-10-13 16:18
谁有例程,能不能发给我啊qifeng8@163.com
我看了d12test中ReadWrite(),他是打开了不同的管道,我造做的话,readfile就在那里死等了. 我用usb调试工具跟踪,writefile正确发出数据了 |
|
8楼#
发布于:2004-10-13 14:48
是的:以下是d12test中ReadWrite()里面的两个语句
CloseHandle(hRead); CloseHandle(hWrite); 很清楚的说明了这一点。请参考d12test的源代码。 |
|
9楼#
发布于:2004-10-13 13:16
那是不是说,写和读要用不同的句柄打开啊
|
|
10楼#
发布于:2004-10-13 11:04
关于概念上的一点补充,对于d12来说只有端点,对于上位机应用程序来说只有管道,读写端点各对应于1个管道,zlg的d12test是同步方式的,dll我没看过源码,不知道。createfile与divicantrol都可以设置工作方式
|
|
11楼#
发布于:2004-10-12 20:21
刚刚查了一下书,说异步同步是由createfile()函数决定的,设置FILE_FLAG_OVERLAPPED就是异步,不然的话,就是同步,我看周立功的测试程序里好像也没设置FILE_FLAG_OVERLAPPED
|
|
12楼#
发布于:2004-10-12 19:32
是不是说,要不同管道,D12的管道1是不是支持读写的?
|
|
13楼#
发布于:2004-10-12 17:53
错误之处在于读写不是同一个管道,管道只能是单向的。你对写管道进行读 当然什么也读不出来。
得到的句柄hand 对读和写的open_file()参数是不一样的。 |
|
|
14楼#
发布于:2004-10-12 17:08
是有点奇怪,你知道d12test.dll内部是同步还是异步吗,这里边是
同步方式,会不会是d12test.dll是异步方式,导致配合不协调。 =======仅供参考 |
|
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 |
|
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再这下面还应该 有一个读通道失败的提示。如果没有提示失败,应该是固件没有把 数据写近单片机的缓冲区。 |
|
17楼#
发布于:2004-10-12 09:55
补充一点:我是打开hand = open_file((LPCSTR)"PIPE01");后进行读写操作的
|
|