Hallo Shooter,
und die sind alle in ihrer Handhabung und im Können gleich gut?
Es ist davon auszugehen, daß es genau wie bei den C-Compilern auch bei den Basic-Compilern (eventuell sogar große) Unterschiede gibt. Ich habe mir mal ein paar Handbücher von Basic-Compilern angeschaut und war etwas entsetzt über die Limitierungen einiger Compiler. Hier mal ein paar Beispiele:
Compiler 1:
CV V1, V2, V...
Setzt die angegebenen Variablen auf Null. (entspricht "V1 = 0" oder "Let V1 = 0", belegt aber
weniger Programmspeicher)
Dec V1
Verkleinert den Wert von V1 um 1 (decrementiert den Wert). V1 kann eine Byte- oder Word-Variable
sein.
Nach Null erfolgt ein Übertrag zu 255 bzw. 65535.
Entspricht dem Befehl V1 = V1 - 1, benötigt aber weniger Programmspeicher.
Übersetzt bedeutet das, daß der Compiler nicht einmal in der Lage ist, zu erkennen, welche Codierungsvariante er wählen muß, um eine Variable auf 0 zu setzen oder um "1" zu erniedrigen.
"V1 = 0" wird also in
movlw 0
movwf V1
statt
clrf V1
übersetzt. Für die Dekrementierung um 1 wird bei "V1 = V1 - 1" der aufwendigere Subtraktionsbefehl ausgeführt (man würde erwarten, daß automatisch "decf" benutzt wird).
Let
(Let) V3 = V1 Wertzuweisung
(Let) V3 = V1 + V2 Operation
Es ist nur eine Operation pro Zeile möglich, negative Werte sind nicht erlaubt.
Bei diesem Compiler gibt es also keine negativen Zahlen.
Zusammenfassend würde ich urteilen, daß dieser Compiler nichts anderes macht, als für einen Basic-Befehl eine fest vorgegebene Assemblersequenz zu generieren. Ich glaube kaum, daß der auf diese Weise generierte Code in irgendeiner Weise optimiert wird. Der für die "Profi-Lizenz" dieses "Compilers" verlangte Preis von 245€ (inkl. MwSt) ist in meinen Augen ein schlechter Witz.
Compiler 2:
Bei der Formulierung mathematischer Ausdrücke sind die Besonderheiten des *** zu beachten:
Der Compiler verarbeitet, aufgrund des sehr kleinen Speichers des Microcontrollers, mathematische Ausdrücke
streng von links nach rechts, ohne Rücksicht auf übliche Konventionen, wie Punkt- vor Strichrechnung.
Diese Begründung ist fast noch unverschämter, als der Preis des oben erwähnten Mitbewerbers. Die Auswertung der Abarbeitungsreihenfolge ist Aufgabe des Compilers und hat mit dem PIC überhaupt nichts zu tun. Der Compiler muß und kann eigentlich problemlos dafür sorgen, daß die Befehle in der "richtigen" Reihenfolge generiert werden.
Um Hersteller, die lediglich einen Basic-Compiler anbieten, würde ich einen Bogen machen. Ich habe das Gefühl, daß vielen Anbietern gar nicht klar ist, was ein Compiler zu leisten hat. Einen guten ersten Eindruck hat der
mikroBasic-Compiler auf mich gemacht (dieser Hersteller bietet auch Pascal- und C-Compiler an).
Muß es unbedingt ein Basic-Compiler sein? Die Standard-Programmiersprachen für Mikrocontroller sind C und ASM. Daher wirst Du beim Einsatz dieser Programmiersprachen (nicht nur hier in diesem Forum) mehr Hilfe und Unterstützung bei Problemen erhalten können.
Viele Grüße
Bernd