Hallo Zusammen,
Ich habe einen ATmega32, der einen kleinen Bot steuert und bin gerade dabei, die Kommunikation mit meinem Linux-PC (Ubuntu, Kernel 2.6.24) in C zu implementieren.
Mein µC gibt momentan timergesteuert über die serielle Schnittstelle ein wiederkehrendes Byte aus. Über ein Terminalprogramm kann ich sehen, wie die Bytes "einfliegen". So weit so gut.
Nun versuche ich, eine Funktion in C zu schreiben, die die serielle Schnittstelle am PC öffnet und konfiguriert, dass ich einzelne Bytes hin- und herschicken kann.
Hierzu orientiere ich mich an einigen deutsch- und englischsprachigen Tutorials im Netz (um mal eines zu nennen.).
In diesen wird immer erläutert, dass die Konfigurationsparameter der Schnittstelle in einer Struktur vom Typ "termios" abgelegt werden. Soweit ist alles klar. Ich erzeuge also eine Struktur und öffne das Device.
Sobald ich aber die FunktionenoderCode:tcgetattr(<filedescriptor>,&<struktur>); /* Funktion der <termios.h> */verwende, spuckt mir der GCC beim kompilieren eine Warnung entgegen:Code:cfsetispeed(&<struktur>, BAUDRATE); /* Funktion der <termios.h> */undrs232.c:36: Warnung: Übergabe des Arguments 2 von »tcgetattr« von inkompatiblem ZeigertypSeltsamerweise verwenden alle Tutorials diese Syntax. Nagut, ist nur eine Warnung, er kompiliert es ja fertig.rs232.c:37: Warnung: Übergabe des Arguments 1 von »cfsetispeed« von inkompatiblem Zeigertyp
Nun komm ich aber zu meinem eigentlichen Problem:
In den Tutorials werden die Konfigurationsflags mit folgender Syntax gesetzt:
Hierbei wird ja bekanntlich auf eine Komponente innerhalb einer Struktur zugegriffen. Ich kann in dieser Zeile keinen Fehler sehen und sämtliche Tutorials benutzen auch genau diese Syntax in ihren Beispielprogrammen.Code:rs232.c_cflag = CLOCAL | CREAD; /* als Beispiel */
Dennoch reagiert mein GCC äußerst ungehalten mit der Aussage:Ja, und hier bin ich mit meinem Latein am Ende. Wenn ein Tutorial diese Syntax verwendet, gehe ich vielleicht noch davon aus, dass sich dort einfach ein Fehler eingeschlichen hat, aber alle verwenden diese Zeile so...rs232.c:39: Fehler: Anfrage nach Element »c_cflag« in etwas, was keine Struktur oder Variante ist
Wie, wenn nicht so, kann ich meine Schnittstelle denn konfigurieren?
Oder sehe ich vielleicht den Wald vor lauter Bäumen nicht?
MfG rockin_santa








Zitieren

Lesezeichen