Zeichenkette auswerten?

Gast #69411
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...
Gast #69412
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ß
Gast #69413
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
#69414
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

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 22 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.