1

我正在编写一个应用程序来通过 libusb 与磁条阅读器进行通信。在 ubuntu 14.04 中它可以完美运行,但是在 pi rasperry 中,当我执行相同的代码时,它会显示这个错误:

libusb: error [reap_for_handle] reap failed error -1 errno=14 libusb: error [handle_events] backend handle_events failed with error -1 libusb: error [sync_transfer_wait_for_completion] libusb_handle_events failed: LIBUSB_ERROR_IO,取消传输并重试,

当他尝试使用函数读取通过端口的内容时会发生这种情况:

u_char * answer ={'\0'};
u_char epAdress;
epAdress=0x81;
r=libusb_bulk_transfer(dev_handle,epAdress,answer,sizeof(answer),&actual, 0);
4

2 回答 2

0

已经解决的问题是从默认存储库安装的 libusb 版本的错误。我所做的是下载它的最新版本并将其编译到树莓派中,这一切都很完美。

这是 [ http://www.linuxfromscratch.org/blfs/view/cvs/general/libusb.html]

于 2017-10-30T23:54:16.187 回答
0

端点0x81是一个 IN 端点(即设备到主机),因为方向位(最高有效位)为 1,这意味着您正在将数据从设备移动到answer.

问题在于u_char * answer = {'\0'}执行标量初始化,并且等效于uchar * answer = '\0'并且实际上等效于uchar * answer = 0.

显然,写入内存位置0是无效的。我很惊讶它在 Ubuntu 上工作,也许编译器设法优化了那个写。你应该写的是u_char answer[] = {'\0'}执行数组初始化的。然后当你传递answer到时libusb_bulk_transfer,数组类型将衰减为指向数组开头的指针类型。

于 2017-10-29T02:46:29.000 回答