Forum: Mikrocontroller und Digitale Elektronik UART string empfangen und verlgeichen


von Karl (Gast)


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

von Joachim (Gast)


Lesenswert?

strcmp()

Gruß
JJ

von Michael S. (captain-stone)


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

von Axel K. (axel)


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.

von Robert B. (goldcap) Benutzerseite


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

von Michael S. (msk) Benutzerseite


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.

von Aahh (Gast)


Lesenswert?

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

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.