Forum: Mikrocontroller und Digitale Elektronik Zeichenkette auswerten?


von Jose (Gast)


Lesenswert?

Hallo!

Mich würde interessieren wie man in Assembler STRINGS auswertet.
Ich bekomme die Daten über die UARD Schnitstelle und kann auch
die einzelnen Zeichen nach einander einlesen.

Nun möchte ich zum Beispiel auf die empfangende Zeichenketten
"SW1:1" und "SW1:0" reagieren.

Währe jemand so nett und würde mir vielleicht einen Tip geben
wie man das angeht.

Einzelne Bytevergleiche verstehe ich ja nur mehrere habe ich noch
nicht gesehen...

Für jeden Tip dankbar... Jose...

von Chris (Gast)


Lesenswert?

Hallo,

man könnte beispielswise fünf Zeichen über das UART in fünf Variablen
einlesen lassen, dann nacheinander die Variablen prüfen.
Ist Variable1 = 'S' nein -> zu abbruch springen, ja ->weiter
ist Variable2 = 'W' nein -> zu abbruch springen, ja -> weiter
...
...
...
Ist man ohne Abbruch bis zum Ende angelangt, wurde der String
erfolgreich eingelesen.
Die fünf Variablen am besten Ansteuern durch erhöhen eines der Pointer
X, Y oder Z.

Gruß

von thkais (Gast)


Lesenswert?

Da gibt es viele Möglichkeiten.
Wenn es nicht allzuviele unterschiedliche und kurze Zeichenketten sind,
kann man es mit Verzweigungen machen, also Zeichen für Zeichen prüfen
und dann mit einem bedingten Sprung verzweigen.

      Wenn Zeichen = "S" dann erstesZeichenOK
      Ende
erstesZeichenOK:
      lies nächstes Zeichen
      wenn Zeichen = "W" dann zweitesZeichenOK
      Ende
zweitesZeichenOK:

usw.
Irgendwann müsstest Du dann zwischen "1" und "0" unterscheiden.
Diese Methode ist aber nur für kurze Befehlssequenzen geeignet, und
eine Änderung oder Erweiterung des Befehlssatzes ist sehr aufwändig.

Die andere Methode arbeitet mit einem Puffer (für den zu überprüfenden
String) und einer Tabelle, in der die gültigen Strings abgelegt sind.
Man geht nun folgendermaßen vor:

1:
Den Zeiger für die Tabelle auf Anfang setzen.
2:
Den Zeiger des zu überprüfenden Strings auf Anfang setzen.

Lies das nächste Zeichen aus dem zu überprüfenden String.
3:
vergleiche es mit dem aktuellen Zeichen aus der Tabelle.
Gleichheit?
Ja, -> beide Zeiger auf das nächste Zeichen setzen. Ist das Stringende
(meistens eine 0) bei beiden Strings erreicht? wenn ja, dann ist der
String erkannt, ansonsten 3.
Nein -> den aktuell ausgewählten String aus der Tabelle übergehen und
den Zeiger auf den nächsten String setzen. ->2

von Peter D. (peda)


Lesenswert?

In der Codesammlung findest Du meinen Bootloader.
Darin ist sowohl ein Uart-Ringpuffer als auch ein Kommandointerpreter
drin.
Dieser vergleicht empfangene Kommandos mit einer Liste und springt bei
Gleichheit zu der Funktion, die hinter dem Text in der Liste steht.
Zusätzlich wird noch versucht, einen Hex-Wert, der nach dem Kommando
folgt einzulesen.

Z.B. liefert das Kommando "Prog 1234" den Wert 0x1234 = 4660.


Peter

von Jose (Gast)


Lesenswert?

Hi Leute!

Danke für Eure Tips!
Ich mache es im Moment mit der für mich wohl einfacheren Lösung.
Chris seinem Vorschlag!

Ich danke!

MfG Jose

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.