阅读:1000回复:12
20分或再加:在应用程序处理共享区数据时,驱动程序是否应该停止操作该缓冲区?
在应用程序处理共享区数据时,驱动程序是否应该停止操作该缓冲区?
我试过,没有停止驱动时,会出现错误. 大家的意见呢? 谢谢关注. |
|
|
沙发#
发布于:2003-08-11 13:26
如果应该停止驱动程序,会不会丢失数据呢?
|
|
|
板凳#
发布于:2003-08-11 14:07
看你的处理方式了。
|
|
地板#
发布于:2003-08-11 14:19
做乒乓缓存,
把一块缓存分成两等份, 当驱动写一块时,应用程序读另一块。 设置标志位,禁止同时读写。 |
|
|
地下室#
发布于:2003-08-11 14:29
能做到不丢失数据吗?数据太宝贵了,
|
|
|
5楼#
发布于:2003-08-11 15:08
你的数据速度是多少?
记得你原来是做ISA卡的驱动是吧。 |
|
|
6楼#
发布于:2003-08-11 22:01
或者是一头进数据,一头出数据的形式 :D
buffer弄大些,防止数据来的太快取不走。 设置标志位,我觉得。。。数据来的时候不应该阻止它被保存。 速度到底有多快? |
|
7楼#
发布于:2003-08-12 18:02
不快,2100bytes/s
就算是2kb/s 我用一个共享缓冲区,驱动写一头,通知接受线程拷贝另一头. 可是发觉居然还是响应不过来,共享缓冲区1000bytes,够了? 很奇怪的问题. isa+VToolsD+VC6 |
|
|
8楼#
发布于:2003-08-12 20:51
中断频率是?
在ISR干太多事了? |
|
9楼#
发布于:2003-08-12 21:17
中断频率2100Hz
我现在接收到字节后,马上写到来自APP的共享缓冲区里,乒乓方式通过VMIN32_PulseWin32Event()通知APP的接收线程来取,取的方式是直接读共享的数组(因为数组就在APP中), 结果发觉中断来不及响应,丢了一些连续的中断,主要是卡的缓冲区有限,64字节,刚好丢连续的64次. 问题好像是没来得及响应. 高手有何建议和意见? 是不是必须主程序用DeviceIOControl把地址传给驱动,有驱动拷贝? 急得上火了 |
|
|
10楼#
发布于:2003-08-12 22:25
2100Hz,一次就读一个byte呀,不快呀,而且还有64字节的卡上的buffer。
|
|
11楼#
发布于:2003-08-13 11:37
但是我的中断服务程序总是响应不过来,看看我的代码:
BOOL XXX::OnSharedHardwareInt(VMHANDLE hCM) { byte300h = _inp(0x300);//用于判断是否是自己的中断. if(0x00 == (byte300h & 0x01)) //自己的中断 { byte301h = _inp(0x301); //读数据 ++counter; //调试 if(counter >= 60) { counter = 0; } dprintf(\"\\ncounter=%d val=%d\",counter,byte301h); } sendPhysicalEOI(); return FALSE; } 老大,我错在哪里了? |
|
|
12楼#
发布于:2003-08-13 13:31
if(NOT_your_INT)
{ return FALSE; } //then your INT ... return TRUE; |
|