我正在编写一个应用程序,通过 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, cancelling transfer and retrying,
当他试图通过函数读取通过端口的内容时会发生这种情况:
u_char * answer ={'\0'};
u_char epAdress;
epAdress=0x81;
r=libusb_bulk_transfer(dev_handle,epAdress,answer,sizeof(answer),&actual, 0);
最佳答案
端点 0x81
是一个 IN 端点(即设备到主机),因为方向位(最高有效位)为 1,这意味着您正在将数据从设备移动到 回答
。
问题是 u_char * answer = {'\0'}
执行标量初始化,等同于 uchar * answer = '\0'
并且确实等价到 uchar * answer = 0
。
显然,写入内存位置0
将无效。我很惊讶它在 Ubuntu 上运行,也许编译器设法优化了该写入。您应该改写的是 u_char answer[] = {'\0'}
,它将执行数组初始化。然后,当您将 answer
传递给 libusb_bulk_transfer
时,数组类型将衰减为指向数组开头的指针类型。
关于c - Raspberry pi 上的 Libusb 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46995648/