关于qnx4.25版本下调用pci函数的问题,tang老大请看看

tang老大,我参考qnx4。25下的help调用相应的pci函数,
if( qnx_osinfo( 0, &info ) == -1 ) {
printf(“Error qnx_osinfo\n”);
exit( EXIT_FAILURE );
}
if( !( info.sflags & _PSF_PCI_BIOS ) ) {
printf(“No PCI BIOS\n”);
return 0;
}
if( _CA_PCI_Find_Device( YOUR_PCI_DEVICE_ID,
YOUR_PCI_VENDOR_ID, pci_index, &busnum,
&devfuncnum ) != PCI_SUCCESS ) {
printf(“Can not find device\n”);
exit( EXIT_FAILURE );
}

// determine device interrupt
if( _CA_PCI_Read_Config_Byte( busnum, devfuncnum,
offsetof(struct _pci_config_regs,
Interrupt_Line),
1, &irq) != PCI_SUCCESS ) {
printf(“Error reading interrupt\n”);
exit( EXIT_FAILURE );
}
在命令行下用cc dio.c的命令将c文件编译成a.out文件,然后用命令./a.out执行,但执行后发现qnx_osinfo函数执行的很顺利,但到了调用_CA_PCI_Find_Device函数的时候,我感觉函数就没有返回,而且系统也报错,错误如下:
//1/tmp/a.out terminated(SIGSEGV) at 0007:0000a2c6
%1 170 Memory fault ./a.out
后来我把这个函数屏蔽了,但是随后调用的_CA_PCI_Read_Config_Byte这个函数也出现了上面的那个错误,我不知道问题出在什么地方,请各位老大帮帮忙吧。十分感谢。

QNX4啊?:slight_smile:

我猜是没有IO权限。应该在链接时用特殊的option,是-T0还是什么。我手头没有QNX4的文档,你查一下编译器的文档,应该有说明的。要读写硬件的程序都需要通过这个,取得IO特权。