www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Zeichenkette auswerten?


Autor: Jose (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Chris (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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ß

Autor: thkais (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Jose (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.