2017-10-28 121 views
1

我正在寫一個應用程序,通過libusb與磁帶閱讀器進行通信。在Ubuntu 14.04它完美的作品,但在PI rasperry當我執行相同的代碼就說明我這個錯誤:Rasperry pi上的Libusb問題

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); 

回答

0

端點0x81是IN端點(即設備到主機),因爲方向位(最高有效位)爲1,這意味着您正在將數據從設備移動到answer

問題是u_char * answer = {'\0'}執行標量初始化,相當於uchar * answer = '\0',實際上相當於uchar * answer = 0

顯然,寫入內存位置0將無效。我很驚訝它在Ubuntu上工作,也許編譯器設法優化了這種寫法。你應該寫的是u_char answer[] = {'\0'},它將執行數組初始化。然後,當您通過answerlibusb_bulk_transfer時,數組類型將衰減爲指向數組開頭的指針類型。