阅读:1667回复:13
请问stephen_young:9054的问题请问stephen_young: 你告诉我的这个例子http://www.driverdevelop.com/forum/viewthread.php?tid=79473 会不会出现这种情况?就是如果不运行app9054.exe,可以随意卸载或者更新驱动程序都可以,但是一运行过应用程序,就不能再卸载或更新了,会报一个错误,好像是mmc.exe没有响应,我也不知道是什么问题,我们用的是工控机,如果你知道,请告诉我解决办法,非常感谢! |
|
沙发#
发布于:2004-10-28 08:30
非常感谢,我确实没有注意这个问题。
不知道你在出现这种情况后,重新启动机器,加载的是从前的驱动,还是更新过的驱动?如果是前者,说明mmc失去响应,应该是驱动无法卸载。我想还是代码有问题。如果是后者,就不清楚了。 我再试验试验。 我其实是个新手,请多指教啊! |
|
|
板凳#
发布于:2004-10-30 18:41
我们好几天都不能上网了,网络坏了,今天才看到你的回复。重启机器后,加载原来的驱动,或者卸载硬件都没有问题,但是运行过app9054后,就不能卸载硬件了,连关机都关不了,我做的驱动和你的都差不多,我的出现了这种问题,把你的驱动加上,也出现了一样的问题,我就不知道问题出在哪里,看着好像是某些资源没有释放才出现这样的问题,但是又找不到,该释放的都释放了,我也是个新手,以后我们共同进步!如果你知道了告诉我!
|
|
地板#
发布于:2004-11-01 09:55
我发现卸载的时候当程序进入DefaultPnp(KIrp I)的时候失去了相应,也就无法进入OnRemoveDevice(KIrp I),不过到底啥原因,我还没弄清。
另外,不知道你有没有试过非dma方式来读fifo?我想试试,但是不知道应该怎么做,是不是用KMemory对象直接ind?可是我每次这样做的结果都不对,不但数据不对,而且如果每次读的字节数超过一定范围(几k)就报内存分页的错误,系统崩溃。 不知道这是否与硬件设置有关?还是寄存器的设置有关?你遇到过这种情况吗? |
|
|
地下室#
发布于:2004-11-01 18:16
我和你的情况一样,也是到哪一步就失去了响应,不过我现在已经解决了,跟你说一下,我们之所以会出错,是因为我们太勤快了,你改一下,在close,还有stopdevice和removedevice的那几项里,不要delete m_pEvent,就是对这个事件不处理就可以了,不要释放这个事件的资源,就可以了,现在才知道,勤快也不好!
我不知道非dma方式来读fifo是什么意思,你是不是想不用readfile来启动dma?我是在创立事件的时候就启动dma, 当传输完成,m_pEvent-〉set,应用程序来读,我没碰到过你那种情况,我觉得不能用KMemory对象直接ind,这样肯定不行 |
|
5楼#
发布于:2004-11-01 19:59
我和你的情况一样,也是到哪一步就失去了响应,不过我现在已经解决了,跟你说一下,我们之所以会出错,是因为我们太勤快了,你改一下,在close,还有stopdevice和removedevice的那几项里,不要delete m_pEvent,就是对这个事件不处理就可以了,不要释放这个事件的资源,就可以了,现在才知道,勤快也不好! 我所用的板子加电就往fifo里灌数据,所以我的应用程序一上来就读数据,通过readfile来启动dma。 你说创立事件的时候就启动dma是不是说在应用程序里紧接着就readfile?你说“当传输完成就m_pEvent-〉set”是指在哪儿? 可否将你的代码发给我看看? [编辑 - 11/1/04 by stephen_young] |
|
|
6楼#
发布于:2004-11-01 20:29
我按照你的方法将原来几处delete m_pEvent的地方删除了,可是还没有解决卸载时失去相应的问题。看来我的代码还是有问题。不知你是如何做的。
|
|
|
7楼#
发布于:2004-11-02 18:33
你的m_pEvent可能要改一下,就是ioctl.h里,改成METHOD_BUFFERED,可能就好了,m_pEvent-〉set是在中断处理里面做的,在中断处理里面, 判断如果是传输完成,就进入DPC处理程序,也就是m_pEvent-〉set;我启动dma不是用readfile ,是用startdma,自己改一下参数就可以了,至于源代码我明天在给你吧,我一天也就只有晚上有空上一会网,今天看到只有明天再带回来了
|
|
8楼#
发布于:2004-11-02 19:19
能不能也提供给我啊.我的邮箱是x810421@163.com,谢谢了
|
|
9楼#
发布于:2004-11-04 14:11
我发现了另外一个问题,那就是将访问驱动程序的函数装在dll里,结果应用程序就无法读取数据了.
应用程序启动时显示create等信息,当readfile时确close,cleanup了。不清楚是怎么回事儿。 |
|
|
10楼#
发布于:2004-11-10 10:11
jcf_jcf:不知道你的驱动做完了没有,我还是无法解决驱动不能卸载的问题。希望能看到你的源码。
另外,不知道你有没有做过分散集中模式,有兴趣可以交流一下。 我的qq:379867 |
|
|
11楼#
发布于:2004-11-22 14:48
stephen_young兄:
仔细研究了一下你写的代码了,有1件事不明: 1 你是通过先创建事件,在驱动中SET,然后用READFILE开始DMA传输,我做的这个东东,在LOCAL端需要READY后就发中断开始DMA,DMA结束之后再开始下次传输,若我的LOCAL端比较快,在DMA传输的时候就READY了,它会发中断,是否会中断当前的DMA? 2 如果不会,假如在DMA传输过程中,LOCAL 就绪了两次以上,即发了两次以上的local input interrupt该怎么办呢? |
|
12楼#
发布于:2004-11-22 16:46
stephen_young兄: 我想你是想说如果local中断比记录数据的速度快怎么办? 我想这与硬件有关,我用的板子是fifo半满后发中断(local),只有将数据读走,硬件才继续记录数据,半满后local才发中断。 也就是说与你的硬件读写时钟有关,如果你的读时钟慢于记录数据的速度,那么就有足够的时间给硬件来记录数据,如果local过快那么它也只能等你读完数据才发时钟,这样也不会出现中断的重叠,但是可能丢数据。 我的看法就是这样 |
|
|
13楼#
发布于:2004-11-25 10:30
谢谢答复,,今天新请教了一个问提,请解答一下,非常感谢
|
|