UART: String empfangen

OP #1895958
Hallo Leute!


Gibt es eine fertige Routine, die es erlaubt, einen String von etwa  10 
Bytes über den UART in einzelne chars zu zerlegen?

Habe vor, ein eigenes Protokoll zu empfangen.:

Empfange:
 81 30

Sende von AVR zurück:

 01 92 83 77 29 22 71 66


Jetzt möchte ich die einzelnen Bytes auswerten und ggf. auch wieder 
einen solchen String zurückschicken.


Vielen Dank!
#1896013
Johannes Knöller schrieb:

> Gibt es eine fertige Routine, die es erlaubt, einen String von etwa  10
> Bytes über den UART in einzelne chars zu zerlegen?

Das was du da hast sind doch gar keine Strings im C-Sinne.
Das sind ganz einfach nur Bytes in einem Array.

Und klar, in einem Array kannst du auf jedes Byte zugreifen.

>
> Habe vor, ein eigenes Protokoll zu empfangen.:
>
> Empfange:
>  81 30
>

OK.
Dann empfang das doch. Jedes Byte welches empfangen wird, wird in einem 
Array zwischengespeichert. Oder man macht sich eine Zustandsmaschine. Da 
gibt es mehrere Möglichkeiten.

> Jetzt möchte ich die einzelnen Bytes auswerten und ggf. auch wieder
> einen solchen String zurückschicken.

Deine Vorstellung davon, was in C ein String ist, ist fehlerhaft.
OP #1896025
Ich meinte ja auch nicht im C-Sinne. Oder habe ich das irgendwo 
erwähnt?!

Ich weiß, dass in C ein String nichts anderes als ein Char-Array ist.

Ich meinte mit String: String im Sinne von Byte-Strom.

Da der Eingangs/Ausgangspuffer im AVR aber ja nichts anderes als eine 
Char-Variable (also 8 bit) ist, wollte ich wissen, wie ich diese 
einzelnen Bytes nacheinander in ein Array schreiben kann.


DAnke!
Gast #1896049
Brauchst doch nur den UART-Puffer ins Array schreiben und bei jeden 
Durchlauf, also immer wenn ein neues Zeichen kommt, den Zähler fürs 
Array erhöhen.
Ich nehem an das Du den Empfang per UART-Interrupt machst.
Wenn die Zeichenkette in ihrer Länge wechseln kann musst Du noch eine 
eindeuteige 'Endesequenz' haben. Beim Erkennen dieser wird dann der 
Zähler für den nächsten Empfang zurückgestellt.
#1896053
Johannes Knöller schrieb:

> Ich meinte ja auch nicht im C-Sinne. Oder habe ich das
> irgendwo erwähnt?!

Und das du in einem C-Forum frägst soll ich wohl ignorieren? Oder ist es 
für dich normal, immer die falschen Ausdrücke zu benutzen wenn du etwas 
nachfrägst?

"String" hat in C eine fixe, feststehende Bedeutung. Falsche Verwendung 
des Ausdrucks führt nur zu Misverständnissen.


> Char-Variable (also 8 bit) ist, wollte ich wissen,

Du willst Bytes schon gar nicht in char Variablen haben

  char         Einzelzeichen im Sinne von Textverarbeitung
  uint8_t      kleiner Integer mit 8 Bit, vulgo Byte
  int8_t       kleiner Integer mit 7 Bit + Vorzeichen


> wie ich diese
> einzelnen Bytes nacheinander in ein Array schreiben kann.

Zähler mitführen

  array[ counter ] = next_Byte_from_UART;
  counter++;

Wenn das als Hilfe immer noch nicht reicht, dann lautet mein Tip:
poste den Code den du hast!
Dann kann man auch etwas spezifischer auf dein Problem eingehen.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 16 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.