mikrocontroller.net

Forum: Compiler & IDEs UART: String empfangen


Autor: Johannes Knöller (anamollo)
Datum:

Bewertung
0 lesenswert
nicht 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!

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Johannes Knöller (anamollo)
Datum:

Bewertung
0 lesenswert
nicht 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!

Autor: DerWarze (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Johannes Knöller (anamollo)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
OK danke erstmal, ich werde das dann versuchen und mich melden.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.