Verständnisproblem UART und "Datentypen"

Gast #2934155
Lesenswert?

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.
Gast #2934167
Lesenswert?

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.
Gast #2934365
Lesenswert?

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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren