Libusb вопрос о Rasperry Pi
Я пишу приложение для связи с читателем магнитной полосы через libusb. в Ubuntu 14.04 это работает отлично, но в pi rasperry, когда я выполняю тот же код, он показывает мне эту ошибку:
libusb: ошибка [reap_for_handle] пожинать не удалось ошибка -1 errno=14 libusb: ошибка [handle_events] backend handle_events завершилась с ошибкой -1 libusb: ошибка [sync_transfer_wait_for_completion] libusb_handle_events не удалась: LIBUSB_ERROR_IO, отмена переноса, отмена передачи, отмена передачи
Это происходит, когда он пытается прочитать то, что приходит через порт с помощью функции:
u_char * answer ={'\0'};
u_char epAdress;
epAdress=0x81;
r=libusb_bulk_transfer(dev_handle,epAdress,answer,sizeof(answer),&actual, 0);
2 ответа
Конечная точка 0x81
является конечной точкой IN (т. е. устройство-хост), поскольку бит направления (самый старший бит) равен 1, что означает, что вы перемещаете данные с устройства в answer
,
Проблема в том, что u_char * answer = {'\0'}
выполняет скалярную инициализацию и эквивалентно uchar * answer = '\0'
и действительно эквивалентно uchar * answer = 0
,
Очевидно, что запись в ячейку памяти 0
будет недействительным. Я удивлен, что это сработало на Ubuntu, возможно, компилятору удалось оптимизировать эту запись. То, что вы должны написать вместо u_char answer[] = {'\0'}
который будет выполнять инициализацию массива. Затем, когда вы проходите answer
в libusb_bulk_transfer
тип массива превратится в указатель, указывающий на начало массива.
Я уже решил проблему с ошибкой версии libusb, которая была установлена из репозитория по умолчанию... я скачал последнюю версию и скомпилировал ее в rasperry, и все это работало отлично.
Вот [ http://www.linuxfromscratch.org/blfs/view/cvs/general/libusb.html]