surbiandrv
驱动牛犊
驱动牛犊
  • 注册日期2003-05-07
  • 最后登录2003-08-11
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1137回复:5

救命!我的VXD采集驱动程序为什么老是蓝屏?

楼主#
更多 发布于:2003-05-18 15:50
我是用VtoosD3.0开发VXD驱动程序。

包含IO端口操作、DMA和中断。

DMA 通道号为5,16bits传输。
int 号为4。

采集程序需要连续采集。我的方法:
采用VSharedHardwareInt 和 VDMAChannel。
DMA设为auto init模式。DMA设为8192字节。传送完后自动重新开始。而接口卡上每1024个DMA请求产生一个中断。
一般情况下能够正常采集。

现在的麻烦问题在于:老是要蓝屏。而且有一个特点,每当打开资源管理器操作硬盘或插入(拔除)USB接口上的优盘后,在主程序执行DeviceIoControl,vxd程序必然会出错:
(softice窗口提示)
Break due to page fault(0Eh), Fault = 0004
或者
Break due to General Protection Fault (0Dh). fault = 0000

用softice装入代码后,有时出错的代码在
OnW32DeviceIoControl的入口。
DWORD CSonicDrvDevice::OnW32DeviceIoControl(PIOCTLPARAMS pDIOCParams)
{
if(m_pSonicInt==NULL) return DEVIOCTL_ERROR;
if(m_pSonicDMA==NULL) return DEVIOCTL_ERROR;
switch (pDIOCParams->dioc_IOCtlCode)
{
case DIOC_OPEN:
dprintf(\"DIOC_OPEN!\\n   \");
break;
case DIOC_CLOSEHANDLE:
dprintf(\"DIOC_CLOSEHANDLE\\n!   \");
break;

而且 即使DMA和中断处于mask状态,也要出错。

surbiandrv
驱动牛犊
驱动牛犊
  • 注册日期2003-05-07
  • 最后登录2003-08-11
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-05-18 17:00
忘记提一点,这是ISA卡,vxd由应用程序动态装入。

各位大侠,好歹给个建议或分析。
crystal521
驱动牛犊
驱动牛犊
  • 注册日期2004-02-14
  • 最后登录2004-11-11
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-05-17 10:01
楼主你好,我也在调ISA的DMA驱动,也是老蓝屏,不知怎么回事,我的错误也是fault(0Eh),而且一出错就vxd就卸载不掉,我怀疑是缓冲区容量申明的问题,因为我屏蔽掉初始化代码里的VDMABuffer::reserve(MAX_TRANSFER_PAGES,(PVOID)MAX_PHYS_ADDR);后就不会蓝屏了。我的DWORD MAX_TRANSFER_PAGES = 4096;DWORD MAX_PHYS_ADDR = 0x18000000;不知道这样申明缓冲区有什么问题?希望能和你共同探讨。QQ:63370649
我的初始代码如下:
BOOL Arinc429Device::OnSysDynamicDeviceInit()
{
pMyIRQ = new MyHwInt();
if((pMyIRQ==NULL)||!pMyIRQ->hook())
return FALSE;
pMyDMA = new MyDMAChannel();
if((pMyDMA==NULL)||!pMyDMA->hook())
return FALSE;
VDMABuffer::reserve(MAX_TRANSFER_PAGES,(PVOID)MAX_PHYS_ADDR);
return TRUE;
}
Crystal521
liu_xw917
驱动牛犊
驱动牛犊
  • 注册日期2003-12-31
  • 最后登录2005-08-05
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2004-05-31 16:08
我做过的Arinc429的卡也是ISA的,你有必要做VXD吗?直接DLL不就完了;再说这个VXD吧,就是缓冲区容量申明的问题!我以前是直接删除这条语句,照样能用。不懂再问吧,QQ:9487774

[编辑 -  5/31/04 by  liu_xw917]
alpha_x
驱动牛犊
驱动牛犊
  • 注册日期2004-06-03
  • 最后登录2004-06-04
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2004-06-03 23:21
试试看去掉 SoftIce, 我做的也是这样的类型的程序
选择不安装 SoftIce 从未出过蓝屏,在98下装driverstudio时候如果装了SoftIce有时候会有奇怪的故障
crystal521
驱动牛犊
驱动牛犊
  • 注册日期2004-02-14
  • 最后登录2004-11-11
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2004-06-04 10:27
呵呵,你用这句了吗?
VDMABuffer::reserve(MAX_TRANSFER_PAGES,(PVOID)MAX_PHYS_ADDR);
如果用了,去掉这句就应该好了。
Crystal521
游客

返回顶部