Forum: Compiler & IDEs UART: String empfangen


von Johannes K. (anamollo)


Lesenswert?

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!

von Karl H. (kbuchegg)


Lesenswert?

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.

von Johannes K. (anamollo)


Lesenswert?

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!

von DerWarze (Gast)


Lesenswert?

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.

von Karl H. (kbuchegg)


Lesenswert?

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.

von Johannes K. (anamollo)


Lesenswert?

OK danke erstmal, ich werde das dann versuchen und mich melden.

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
Noch kein Account? Hier anmelden.