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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.