阅读:1099回复:0
关于USB驱动和固件协同工作的问题!请高手&版主救命!
过程:host先向设备写数据,device端做一定处理后,向host返回数据,create,writefile和readfile都用的是异步的方式。
问题: 如果我单步执行writefile和readfile,也就是说在readfile之前留有足够的时间,就无论多大的数据都能够正确读写;但如果writefile和readfile之间没有单步,即全速执行,则GetOverlappdResult返回成功了,但返回长度为0,事实上什么都没有读出来,而且通道阻塞了,此时的固件程序端显示的是还在向主机发送数据,没有发送结束;这个时候,如果主机端再发下一轮的writefile时,自然就发送不下去了。 尝试1)如果在device数据准备好之前就打开IN端点,则全速执行时仍然显示GetOverlappdResult执行成功,但读到的数据个数为0,且device端显示没有发送出去; 尝试2)如果我在in端点的数据准备好之前关闭IN端点,则readfile会waitforsingleEvent等待直到超时返回; 因此,感觉我的驱动是无论什么情况都只查询一下设备的状态就返回了,那么如果设备准备好了数据,自然可以返回;如果端口打开,但没有准备好数据,就返回0;如果端口尚未打开,就一直PENDING到超时,也不管你后面再打开没有。 1)为什么会这样? 2)驱动在把读数据的irp包送下去以后,难道不能循环判断端口的状态吗? 3)pending的这段时间里,驱动和底层都在干吗? |
|