老师您好:
我最近在自己调试一个基于FPGA和PCI9054的数据采集卡的项目,遇到了一个非常奇怪的问题。下面的代码是将PCI的BAR2映射到虚拟地址,并将地址偏移为0x174位置的数值赋值给value然后打印出来。
当我注释掉printf那一行的时候,程序可以正常执行,但如果打开printf那一行,就会死机!之前从来没遇到过这种问题,上网查也查不到类似的情况,实属无奈,向您求教,希望能够获得解答!!
// Test Code.
U8 i;
U32 value;
U32 VA[6]; // Virtual address
for(i=0;i<6;i++){
rc = PlxPci_PciBarMap(Device,i,&(VA[i]));
if(rc != PLX_STATUS_OK){
printf("API Failed. rc = %d\n",rc);
}
}
printf(
" BAR0 VADDR = 0x%08x.\n"
" BAR1 VADDR = 0x%08x.\n"
" BAR2 VADDR = 0x%08x.\n"
" BAR3 VADDR = 0x%08x.\n"
" BAR4 VADDR = 0x%08x.\n"
" BAR5 VADDR = 0x%08x.\n"
,VA[0],VA[1],VA[2],VA[3],VA[4],VA[5]);
// Read a 32-bit value from Space 0 (For 9054, Space 0 is at PCI BAR 2)
value = *(U32*)(VA[2]+0x174);
*(U32*)(VA[2]+0x174) = value;
//printf("00000000000000000000 %d\n",value);
程序执行成功的打印是:
root@imx6qsabresd:/mnt/App# ./ApiTest
PLX SDK API Test
January 2007
1. 9054 10b5 [b:02 s:00 f:0]
0. Cancel
Device selection --> 1
Plx9054: Mapped Phys (01300000) ==> User VA (76fc6000)
API Failed. rc = 522
Plx9054: Mapped Phys (01100000) ==> User VA (76cf2000)
Plx9054: Mapped Phys (01200000) ==> User VA (76bf2000)
API Failed. rc = 522
API Failed. rc = 522
BAR0 VADDR = 0x76fc6000.
BAR1 VADDR = 0x00000000.
BAR2 VADDR = 0x76cf2000.
BAR3 VADDR = 0x76bf2000.
BAR4 VADDR = 0x00000000.
BAR5 VADDR = 0x00000000.
11111111111111111111111
222222222222222222222
33333333333333333333
root@imx6qsabresd:/mnt/App#
执行失败的打印是:
root@imx6qsabresd:/mnt/App# ./ApiTest
PLX SDK API Test
January 2007
1. 9054 10b5 [b:02 s:00 f:0]
0. Cancel
Device selection --> 1
Plx9054: Mapped Phys (01300000) ==> User VA (76f7f000)
API Failed. rc = 522
Plx9054: Mapped Phys (01100000) ==> User VA (76cab000)
Plx9054: Mapped Phys (01200000) ==> User VA (76bab000)
API Failed. rc = 522
Unhandled fault: external abort on non-linefetch (0x1018) at 0x76cab174
API Failed. rc = 522
BAR0 VADDR = 0x76f7f000.
BAR1 VADDR = 0x00000000.
BAR2 VADDR = 0x76cab000.
BAR3 VADDR = 0x76bab000.
BAR4 VADDR = 0x00000000.
BAR5 VADDR = 0x00000000.
Bus error
root@imx6qsabresd:/mnt/App#
嵌入式C的问题,如果实在解决不了,可以私聊我,我可以帮你邀请这方面的专家来会会诊:)