Hallo und guten morgen, ich habe ein kleines Verständnisproblem beim UART und Datentypen. Ich habe die UART lib von Peter Fleury integriert. Kann damit an Hterm auch strings senden, diese kommen an und funktioniert auch soweit. Die Funktion sendet ja aber immer Daten vom Typ char. Was ist aber, wenn ich die Daten nicht "lesbar" brauche an Hterm, sondern mit einem PC-Programm einfach Variableninhalter vom typ int8_t oder int16_t hin und herschieben möchte? Also wie sende ich im Prinzip zahlen anstatt "Zeichen"? Danke.
Thorben schrieb: > Also wie sende ich im Prinzip > zahlen anstatt "Zeichen"? es werden immer 8bit* übertragen, auf dieser ebene gibt es keine unterschiede zwischen Zeichen und Zahlen. * Man kann auch 6,7 oder 9 bit übertragen, aber ist nicht wirklich gebräuchlich.
Was Du meinst, nennt sich Protokoll. Das Protokoll legt fest, in welcher Form welche Daten übertragen werden. Du kannst z.B. ein (salopp gesagt) "Klartext-Protokoll" haben, wo Deine Daten als lesbare ASCII-Zeichen übertragen werden, so daß man es mit jedem Terminal mitlesen kann. Du kannst aber auch ein "Binär-Protokoll" haben, wo die Daten in beliebiger Binärdarstellung übertragen werden. Das einzige, was wichtig ist, ist daß beide Gegenstellen (µC und PC) das gleiche Protokoll verwenden.
int8_t ist nichts anderes als ein (signed) char, das kannst Du direkt an die UART-Routine übergeben. Längere Integers musst Du vorher in einzelne Bytes zerlegen. Das geht auf unterschiedliche Weise. Die sicherste* ist folgende:
1 | uint16_t x = 12345; |
2 | |
3 | uart_putc(x >> 8); // das höherwertige Byte senden |
4 | uart_putc(x); // die niederwertige Byte senden |
Beim Empfänger:
1 | uint16_t x; |
2 | |
3 | x = ((uint16_t) uart_getc()) << 8; // das höherwertige Byte speichern |
4 | x |= uart_getc(); // das niederwertige Byte speichern |
In einer realen Anwendung bräuchte man an der Stelle natürlich auch noch eine Fehlerbehandlung. Also was passiert, wenn mal ein Byte verloren gehen sollte ... * "sicher" heißt in dem Zusammenhang, dass jeder Sender/Empfänger die Bytes in der richtigen Reihenfolge verarbeitet, auch wenn er sie intern unterschiedlich im Speicher ablegt, um mit den Werten zu rechnen. Das kann nämlich je nach Prozessorplattform unterschiedlich sein.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.