请教一个怪问题!

PXIS-2630的主机,qnx6.2.0系统:
自己开发的一个pxi数据采集卡的驱动程序。如果电脑先进windows系统,然后再选择开始菜单选择重新启动,再进qnx,该驱动程序可以正常运行,并可以打印采集的数据。 但是如果直接开机进qnx,驱动程序在配置采集卡阶段的几秒内就死机了,鼠标键盘完全没有响应了。
配置采集卡时,为了校准温度,重写了EEPROM. 该程序是从linux驱动源码中改写的。
请问这个怎么回事吗,谢谢!

应该是还有一些卡的初始化你没有做。

Windows后,再进QNX就可以用,就好象Windows对你的卡做了一定的初始化。

你可以试试,在你初始化卡之前,把卡上的所有寄存器内容都打出来看看,看在两种情形下有什么区别。

xtang: 再指导我一下啊 :slight_smile:
经过gdb调试,我发现程序在下面的函数中导致电脑死机
BOOLEAN AD_Set_CFIFO(PPCI_DEVEXT pDevExt, U16 ch, U16 range, BOOLEAN fSimu)
{
PT_REG rPT;
U32 dwPort;
ThreadCtl(NTO_TCTL_IO, 0);
dwPort = PT_Port(pDevExt);
rPT.r = 0;
rPT.b[0] = pDevExt->wAdConfig;
if(range>3)
rPT.AdSConfig.InputSignalPolar = 0x0;
else
rPT.AdSConfig.InputSignalPolar = 0x1;
rPT.AdSConfig.AdGain = range & 0x3;
rPT.AdSConfig.AdChanSet = ch;
PT_outd(dwPort, AD_CONF, rPT.r);// 执行此句死机 ??
// 就是向dwPort+0x20 寄存器中写0的时候死机的。不是跟IO地址和内存地址有没有关系,请xtang指点一下,谢谢
/*说明
#define PT_Port(pDevExt)
(pDevExt->dwPortMapAddr[1])
#define PT_outd(Port,Ofst,Value)
out32( (U32)(Port+ADL_PT
##Ofst),(U32)Value )
其中 ADL_PT_AD_CONF 定义为 0x20
*/

_2010_AD_Reset_Calibration(pDevExt, ch, rPT.AdSConfig.InputSignalPolar);
if(!fSimu) {
rPT.AdSConfig.AdChanSet = 0x4|ch;
rPT.AdSConfig.AdChanEn = 1<<ch;
PT_outd(dwPort, AD_CONF, rPT.r);
}
return TRUE;
}