PCIE改错记录——riffa结构运行不了多次
问题:使用pcie riffa进行开发时,进行循环发送接收,出现卡顿现象,下为寻找原因的过程:
1.通过测试发现卡在发送阶段,从PC端程序出发,其中fpga_send函数在测试中有一句WaitForSingleObject(evt, INFINITE);
该函数的应用为:
你可以使用WaitForSingleObject函数来等待一个内核对象变为已通知状态:
DWORD WaitForSingleObject(
HANDLE hObject, //指明一个内核对象的句柄
DWORD dwMilliseconds); //等待时间
该函数需要传递一个内核对象句柄,该句柄标识一个内核对象,如果该内核对象处于未通知状态,则该函数导致线程进入阻塞状态;如果该内核对象处于已通知状态,则该函数立即返回WAIT_OBJECT_0。第二个参数指明了需要等待的时间(毫秒),可以传递INFINITE指明要无限期等待下去,如果第二个参数为0,那么函数就测试同步对象的状态并立即返回。如果等待超时,该函数返回WAIT_TIMEOUT。如果该函数失败,返回WAIT_FAILED。
为此可以推测,程序卡在了这里,前面语句
status = DeviceIoControl(fpga->dev, IOCTL_RIFFA_SEND, (LPVOID)&io,
sizeof(io), data, (len<<2), &wordsReturned, &overlapStruct);
发送失败,status为0,执行无限期等待其通知状态,但是fpga端一直是未通知状态,所以无法进行下面错误判断和输出。
----------------------------------------------------------分隔符
问题解决了,需要换驱动riffa2.2.2版本,该版本在后续测试中还发现了其他问题,也是反复发送到一定数值之后,报错。