[英]Libusb issue on Rasperry pi
我正在編寫一個通過libusb與磁條閱讀器通信的應用程序。 在ubuntu 14.04中它可以正常工作,但是在pi rasperry中,當我執行相同的代碼時,會顯示此錯誤:
libusb:錯誤[reap_for_handle]失敗失敗-1 errno = 14 libusb:錯誤[handle_events]后端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);
端點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版本的錯誤。我所做的是下載它的最新版本並將其編譯到樹莓派中,並且一切正常。
這是[ http://www.linuxfromscratch.org/blfs/view/cvs/general/libusb.html]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.