
|
INFO - FAQ - CC2-Forum - CCPro-Forum |
|
Hallo, > Das mag für Deinen Compiler vielleicht zutreffen, bei CCBAS2MC ist das aber ganz und gar nicht der > Fall. Wie in der Anleitung steht, läßt sich anhand einer Konfigurationsdatei eindeutig festlegen, wie > die CCBASIC-Token in Assemblerquellcode umgewandelt werden. define i1 byte define i2 byte define i3 byte define p port[1] #loop if p = on then goto raus if i1 < 255 then goto weiter i2 = i2 + 1 i1 = 0 #weiter i1 = i1 + 1 goto loop #raus Das Problem liegt am Aufruf des CCBAS Compilers von Conrad. CCBAS2MC ersetzt jedes Token des CCBAS Kompilats in Assembler um. Der CCBAS Compiler anderseits ist ein _Compiler_ und jeder Compiler erzeugt in der Praxis Codesegemente, die nicht effizient sind (vlg. zum Beispiel "Compilerbau Teil 2" Alfred V. Aho, Ravio Sethi, Jeffry D. Ullman, Kapitel 10 "Code-Optimierung", S. 715ff oder gängige Informatik-Scripte zum Thema "Compilerbau"). Zum Beispiel erzeugt der CCBAS Compiler einen ELSE Zweit, auch wenn diese nicht verwendet wird (ich weiss, CCBAS2MC kommentiert diesen dann aus, andererseits ruft der die C-Control Betriebssystemroutienen auf, weißt Du wieviele Takte die zum Ablaufen brauchen?). Das ist halt normal bei einem Compiler, der eben eine Hochsprache in Byte Code übersetzt. Im Übrigen erzeugt CCBAS und der BASIC++ Compiler bei dem Beispiel oben genau den gleichen Code. Die Realisierung eines solchen Timers in Assembler ist keine schlechte Idee, doch sollte man grade hier wo es auf die genaue Taktzahl ankommt keinem Compiler vertrauen. Gruß, Stefan Meine Homepage: http://www.fdos.de/ccbpp |
| Antwort schreiben |