www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik UART string empfangen und verlgeichen


Autor: Karl (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hi Leute,

ich wollte mal fragen, wie man es am einfachsten realisiert, dass man 
über eine Serielle per UART befehle empfängt und diese Verarbeitet...
Also genauer, ich möchte ein Protokoll realisieren, allerdings fehlen 
mir erfahrungen, wie das grundsätzliche einlesen und vergleichen mit 
vordefinierten strings geschieht.
Ich empfange über die UART-ISR Zeichen für Zeichen und puffere diese 
Zeichen in einem Chararray.
Nun frage ich in der ISR auf 0x13 ab (return gedrückt) und setze ein 
flag für die Main. Wie kann ich jetzt am einfachsten vergleichen, ob das 
empfangene, einem vordefinierten commando entspricht?
Muss ich da das Array zeichen für zeichen abklappern, oder gibt es 
möglichkeiten einen nullterminierten string mit einem anderen zu 
vergleichen?
Danke und Gruß
Karl

Autor: Joachim (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
strcmp()

Gruß
JJ

Autor: Michael Steinbauer (Firma: Steinbauer Electronics GmbH) (captain-stone)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Karl,

> Muss ich da das Array zeichen für zeichen abklappern, oder gibt es
> möglichkeiten einen nullterminierten string mit einem anderen zu
> vergleichen?

ich denke du suchst:

int strcmp(const char* s1, char* s2)

Stammt aus der string.h, ich empfehle einschlägige Literatur zum Thema 
Strings (z.B. http://de.wikibooks.org/wiki/C-Programmierung:_string.h)

Michael

Autor: Axel Krüger (axel)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kommandos über uart mache ich immer so:

zb. sendet µc 1 an µc2  so:

xg    (Befehl1)
xxg   (Befehl2)
.
.
.


Das Zeichen "g" löst beim µc 2 den "Bytematch" Interrupt aus.
Anschließend wird mit len(empfangenstring) geguckt wieviele Zeichen vor 
dem "g" eingetroffen sind. Mit einem Case Select Dingens kann man dann 
entsprechend sagen was passieren soll.

Autor: Robert B. (goldcap) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich habe in den letzten Jahren einen Kommandointerpreter programmiert 
bei dem man Befehle über UART an den AVR schickt und die Kommandozeile 
mittels einer statengine interpretiert.
Dazu habe ich mal einen wiki-artikel angelegt, allerdings zögere ich 
noch ein wenig die Sourcefiles zur Verfügung zu stellen, da nicht 100% 
aus meiner Feder stammen.

http://www.mikrocontroller.net/articles/Terminal_m...

Autor: Michael S. (msk) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mein Vorschlag wäre, die Vergleiche über eine Prüfsummenberechnung zu 
machen. Ich habe es noch nicht probiert, kann mir aber vorstellen, dass 
die String-Bibliothek Einiges an Platz frisst.

Vorschläge für eine einfache, schlanke, aber eindeutige 
Prüfsummenberechnung (Hashfunktion) würden mich übrigens auch 
interessieren. Zur Zeit benutze ich für meine Steuerung über RS232 nur 
eine recht einfache, die theoretisch nicht eindeutig ist.

Autor: Aahh (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Eine stringbibliothek ? Wozu ? Zum Vergleichen und kopieren ? Ein CRC 
ist Standard, ein paar Zeilen.

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.