UART string empfangen und verlgeichen

Gast #1397566
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
#1397594
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
#1397639
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.
Persönliche Seite #1398120
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_mit_Kommandointerpreter
Persönliche Seite #1398239
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.

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.