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...
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ß
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
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.