Forum: PC-Programmierung libusb (usb_interrupt_write


von Maik G. (maik_l)


Lesenswert?

Moin zusammen,

z.Z. versuche ich mich an der Kommunitation der USB-SChnittstelle 
mithilfe der "libusb" unter C auf Debian.

Trotz meiner, ich nenn's mal so veralteten Englichkenntnisse komme ich 
mit der Docu soweit gut vorran. habe mir ein kleines Testtool 
geschrieben, welches mir für den anfang nur den Befehl "#DL" auf mein 
eDip-Entwiklungsboard schieben soll.

der Befehlaufruf soll erfolgen via
1
usb_interrupt_wirte(udev,1,test,3,1000);
Die Variable test ist wie folgt definiert.
1
char test[3]="#DL";

Gut ob sich der fehler da versteckt, lass ich erst mal im raum stehen.

nach ausführung von
1
gcc -o gcc -o FInd_Def FInd_Def.c -lusb
 erhalte ich nachstehende Meldung
1
/tmp/ccWENo42.o: In function `main':
2
FInd_Def.c:(.text+0x114): undefined reference to `usb_interrupt_wirte'
3
collect2: ld returned 1 exit status

Muß zugeben, das auch meine C-Kenntnisse nicht gerade die Besten sind. 
aber immerhin gut genug, genug, um aus vorhandenen Codes etwas zu bauen 
und den code selbst zu verstehen, wenn ich etwas Zeit damit verbringe.

Gut. soweit erst mal...
Wäre super, wenn jemand von euch eine Idee für mein Fehler hat.

von Andreas S. (Firma: Schweigstill IT) (schweigstill) Benutzerseite


Lesenswert?

Nicht Deine Englischkenntnisse sind das Problem, sondern die Tatsache, 
dass Du irgendwelche Texte ohne Beachtung der Schreibweise hinrotzt und 
erwartest, dass der Compiler dies erkennt und in Deinem Sinne 
korrigiert.

von Maik G. (maik_l)


Lesenswert?

Mit anderen Worten der Fehler scheint in der Zeile
1
char test[3]="#DL";
zu stecken.
Gibt auch eine Freundlichere Art dies zu sagen und nicht so Großkozig; 
sry für den Ausdruck; wir es vom VP kahm.

von Andreas S. (Firma: Schweigstill IT) (schweigstill) Benutzerseite


Lesenswert?

Maik LoveNigth schrieb:
> Mit anderen Worten der Fehler scheint in der Zeile
>
>
1
char test[3]="#DL";
> zu stecken.

Nein, falsche Zeile.

> Gibt auch eine Freundlichere Art dies zu sagen und nicht so Großkozig;
> sry für den Ausdruck; wir es vom VP kahm.

Man kann ja wohl erwarten, dass Du zumindest die Schreibweise Deines 
Programmcodes korrigierst, wenn Dich der Compiler oder Linker darauf 
hinweist. Vermutlich hast Du auch noch die Compiler-Warnung "Missing 
prototype for usb_interrupt_wirte" oder so ähnlich unterschlagen.

von Maik G. (maik_l)


Lesenswert?

unterschlagen?
1
root@gnublin:~/eDip# ls -l  
2
total 24
3
-rw-r--r-- 1 root root 2294 Aug 22 18:26 FInd_Def.c
4
-rw-r--r-- 1 root root 2195 Aug 22 18:35 FInd_Def.c.save
5
-rw-r--r-- 1 root root 2059 Aug 22 18:35 FInd_Def.c.save.1
6
-rwxr-xr-x 1 root root 7659 Aug 21 15:37 Find_Def
7
-rw-r--r-- 1 root root  153 Aug 21 12:42 find_def
8
root@gnublin:~/eDip# gcc -o FInd_Def FInd_Def.c -lusb
9
/tmp/ccAFkiIB.o: In function `main':
10
FInd_Def.c:(.text+0x114): undefined reference to `usb_interrupt_wirte'
11
collect2: ld returned 1 exit status
12
root@gnublin:~/eDip#

ob ich schreibe
1
usb_interrupt_wirte(udev,1,test,3,1000);
 oder
1
usb_interrupt_wirte(udev,1,"#DL",3,1000);
der fehler ist der gleiche.

Vermute mal, das du sowas in der Richtung
1
int _send:= usb_interrupt_wirte(udev,1,test,3,1000);
 meinst

von Andreas S. (Firma: Schweigstill IT) (schweigstill) Benutzerseite


Lesenswert?

Maik LoveNigth schrieb:
> Vermute mal, das du sowas in der Richtung
>
1
int _send:= usb_interrupt_wirte(udev,1,test,3,1000);
 meinst

Nein.

1. Du hast den Schreibfehler immer noch nicht korrigiert.
2. In C gibt es keine Zuweisung mit ":=". Das wäre nämlich z.B. Pascal, 
Delphi oder SCL/ST.

von Thomas H. (thomash2)


Lesenswert?

Frage mich wie lange es dauert bis er "wirte" durch "write" ersetzt 
hahaha


char test[3]="#DL"; ist aber auch nicht richtig "#DL" ist nach Adam 
Riese noch immer 4 Bytes.

von Maik G. (maik_l)


Lesenswert?

Holzhammer sag ich nur...

hab ich echt nicht gesehen.

schreib ich lieber gleich so das was du meinst
1
usb_interrupt_wirte(udev,1,"#DL",4,1000);

4 Byte? Stimmt bei C war ja noch so ein Scheiß extrabyte bei. :@

von Thomas H. (thomash2)


Lesenswert?

Maik LoveNigth schrieb:
> usb_interrupt_wirte(udev,1,"#DL",4,1000);

usb_interrupt_write(udev, 1, "#DL", 3, 1000);

das 4. byte willst du ja nicht mitschicken, bei der Allokierung reicht 
das 3 byte Feld fuer die 4 Bytes aber nicht aus.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.