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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren