2017-10-28 21 views
1

libusbを使って磁気式バンドリーダーと通信するアプリケーションを作成しています。 Ubuntuの14.04で、それは完全に私は同じコードを実行する際にパイrasperryで、それは私にこのエラーを示し作品:Rasperry piのLibusbに関する問題

u_char * answer ={'\0'}; 
u_char epAdress; 
epAdress=0x81; 
r=libusb_bulk_transfer(dev_handle,epAdress,answer,sizeof(answer),&actual, 0); 
:彼は機能を持つポートを介して何が来るのか読み取ろうとするとき

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,

これが起こります

答えて

0

エンドポイント0x81は、方向ビット(最上位ビット)が1でデバイスのデータをanswerに移動していることを意味するため、INエンドポイント(つまりデバイスからホスト)です。

u_char * answer = {'\0'}はスカラーの初期化を実行し、uchar * answer = '\0'に相当し、実際にはuchar * answer = 0に相当します。

明らかに、メモリ位置0への書き込みは無効になります。私はそれがUbuntuで動作するのに驚いています。おそらく、コンパイラはその書き込みを最適化することができました。その代わりに、配列の初期化を実行するu_char answer[] = {'\0'}です。次にanswerlibusb_bulk_transferに渡すと、配列の型は配列の先頭を指すポインタ型に減衰します。

関連する問題