Hallo zusammen, ich habe hier mal wieder eine Idee und weiß nicht so recht, ob das was werden könnte... Bin hier immer noch damit beschäftigt, die Software für meine Heizungssteuerung zu schreiben. Da ich leider nur ASM kann ist das ganze von der späteren erweiterbarkeit, ohne den Code zu ändern sehr schlecht möglich. Jetzt habe ich mir überlegt, eine art "Basic" interpreter zu schreiben. Dieser ist natürlich sehr abgespeckt und kennt auch nur Befehle die zur Steuerung der Anlage interessant sind. Soll dann alles über V.24 (Terminalprogramm) gesteuert werden. Ein 4x20 LCD zeigt entsprechende, Programmierte Anlagendaten an. Geschriebene Programme können dann auf einer SD/MMC Karte gespeichert und geladen werden. Dies kann dann auch zum aufzeichnen eines Log Files dienen. Wenn ich jetzt eine Zeile in den Puffer hole, muß diese erst zerlegt werden, auf Fehler überprüft werden und ausgeführt werden. Bei einfachen Befehlen wie "RELAIS X:=1" -> Relais x einschalten kein Problem. Wie geht man aber am besten bei einer IF THEN Anweisung ran? Es gibt ja mehrere varianten, die erkannt werden müssen. Bsp: IF X > 1 THEN PUMPE N:=1 IF X = Y THEN GOTO 20 IF (X-5) = 2 THEH Z:=12 oder Mathematische Operationen X:=(Z+3)*Y-5*2 Ist im Prinzip eine ganz einfache Taschenrechner Punkt vor Strich rechnung mit Klammer. Wie kann man soetwas realisieren? Ist ja im prinzip nichts neues konnte der ZX81 glaub ich auch schon alles. Bin für jeden Tipp/Link dankbar, denn ich denke das dies die Lösung meines Problemes mit der Erweiterbarkeit der Steuerung ist. Jedes Relais, jeder PWM Kanal, jeder Temp Sensor Raumfühler LCD bekommt eine Adresse auf dem RS-485 Bus zugewiesen und ist vom Interpreter dann unter dieser ansprechbar. Da es sich hier 'nur' um eine Heizungssteuerung/Temperaturregelung handelt, spielt Geschwindigkeit eine sehr untergeordnete Rolle. Viele Grüße und besten dank im voraus, Tubie
"Compilerbau" von Niklaus Wirth. Dort ist ein Parser für Ausdrücke drinnen.
Ich hatte für meinen BASIC-Computer (AVR-Chipbasic) als allererstes einen Parser geschrieben. Dazu habe ich einen Algorithmus zur Infix-Postfix Konvertierung benutzt. Nur anstelle die Zeichen auszugeben habe ich die Zahlen auf einen Stack geschrieben und die Operatoren ausgeführt. Funktionen wie ABS() funktionieren wie einfache Klammern, nach dem Schliessen der Klammer wird dann noch zusätzlich die Funktion (hier Absolutwert bilden) ausgeführt. Allerdings lassen sich auf diese Weise nur Funktionen mit einem Argument realisieren. Zur Ausführung ist es am einfachsten, wenn die Schlüsselwörter bereits durch Token ersetzt sind. Dazu kann man festlegen, dass bei Token Bit 7 gesetzt ist und dadurch die Abarbeitung noch etwas beschleunigen. Die Zeile wird in einen Puffer kopiert und dann Zeichen für Zeichen abgearbeitet. Für jeden Token gibt es dann einen eigenen kleinen Programmteil, der bei IF in etwa so aussieht: 1. Setze den Pointer auf das erste Nichtleerzeichen nach IF 2. Rufe den Parser auf 3. ist das Ergebnis 0 (oder falsch), dann mache mit nächster Zeile weiter 4. Suche das nächste Nichtleerzeichen 5. Ist es ein "THEN" Token, ignoriere ihn einfach Gruß Jörg
Beitrag "BASIC-Computer mit Mega32" oder als SPS: Beitrag "SPS Betriebssytem" Oliver P.S. UVR 1611 :-)
Hier hab ich einen interesannten Link zum Thema Infix->Postfix - Umwandlung: http://www.cz.j.th.schule.de/html_inc/schule/lehrer/privat/mirko_koenig/postfix/postfix.htm Da steht beschrieben, wie man mathematische Ausdrücke berechnen kann: Einfach von Infix nach Postfix wandeln und dann den Postfix-Ausdruck berechnen. Das ist wohl ganz einfach erweiterbar, man muss nur die Reihenfolge der Operatoren beachten... Punkt vor Strich,usw. Gruß, SIGINT
Wow! Danke erstmal für die vielen, nützlichen Tipps. Da habe ich jetzt erstmal genug Lesestoff bis zum Wochenende. Dann will ich mal das AVR Studio starten und sehen, was sich machen lässt. Wenn ich noch fragen habe, melde ich mich auf jeden Fall nochmal. Dickes Dankeschön, Tubie
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.