2017-10-28 15 views
1

나는 libusb를 통해 자기 밴드 리더와 통신하기위한 어플리케이션을 작성 중입니다. 우분투 14.04에서 완벽하지만 동일한 코드를 실행할 때 파이 rasperry에서 나에게이 오류가 표시 작동합니다Rasperry 파이에 관한 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

방향 비트 (최상위 비트)가 1이고 장치에서 데이터를 answer으로 이동 중이므로 끝점 은 IN 종점 (즉, 장치 대 호스트)입니다.

u_char * answer = {'\0'}은 스칼라 초기화를 수행하며 uchar * answer = '\0'과 같으며 실제로는 uchar * answer = 0과 같습니다.

분명히 메모리 위치 0에 쓸 수 없습니다. 우분투에서 작동하는 것에 놀랐습니다. 아마도 컴파일러가 그 최적화를 최적화 할 수있었습니다. 대신 배열 초기화를 수행하는 u_char answer[] = {'\0'}을 써야합니다. 그런 다음 answerlibusb_bulk_transfer으로 전달하면 배열 유형이 배열의 시작을 가리키는 포인터 유형으로 붕괴됩니다.