![]() ![]() INFO - FAQ - CC2-Forum - CCPro-Forum |
|
' =========================================================================== ' Demonstration der Geschwindigkeit von Code, der mit OCBASR kompiliert wurde ' In OCBASR 4.01 auf der Open-Maxi von Dietmar Harlos am 20. Februar 2020 ' =========================================================================== ' Um BASIC-Programme noch weiter zu beschleunigen, habe ich für die ' OM-Controller einen Compiler namens OCBASR geschrieben, mit dem der ' Anwender BASIC-Quellcode sehr komfortabel in Maschinensprache, bzw. ' Assembler, umwandeln kann. Der Standard-Compiler OCBASIC übersetzt ' bekanntlich BASIC-Quellcode in Tokencode, der vom Interpreter in der OM ' ausgeführt wird. Gegenüber diesem interpretiertem Tokencode wird die vom ' Compiler OCBASR erzeugte Maschinensprache erheblich schneller ausgeführt. ' Der zu beschleunigende Code muß in einer Subroutine oder in einer Funktion ' stehen. Wird hinter die Startzeile dieser Subroutine oder Funktion das ' Schlüsselwort COMPILE angefügt, wird der OCBASR-Compiler aktiv und ' übersetzt den in ihr stehenden BASIC-Sourcecode in die Maschinensprache. ' Dieser Programmteil wird nun üblicherweise 3 bis 4 mal schneller ' ausgeführt. Einige BASIC-Befehle sind sogar 10 bis 20 mal schneller. ' Dieses Programm ist 18.4/1.2 = 15.3 mal schneller, wenn es compiliert wird. ' Es wird ein Port 1.67 Millionen Mal pro Sekunde per TOG-Befehl ' umgeschaltet, es ergibt sich somit eine Rechteckschwingung mit einer ' Frequenz von 833 kHz am Port. ' --- Definitionen ---------------------------------------------------------- INCLUDE "omax.def" 'Definitionen für die Open-Maxi DEFINE myport PORT[1] 'Bitport definieren ' --- Hauptprogramm --------------------------------------------------------- myport=ON 'Port einmalig auf Ausgang schalten togtest 'Subroutine aufrufen END ' --- Subroutinen ----------------------------------------------------------- PROCEDURE togtest COMPILE 'Subroutine mit COMPILE-Schlüsselwort WHILE TRUE 'Endlosschleife TOG myport 'Port toggeln WEND RETURN 'Rücksprung aus der Subroutine END PROCEDURE ' Die Subroutine wird von OCBASR übersetzt in: ' PROC TOGTEST INLASM ' #ocbasr12 '80 ' !lda #1 '2 TZ \ ' !eor PTA '3 TZ \ ' !sta PTA '3 TZ > 12 TZ ' #ocbasr14 '3 ' / ( 20e6 / 12 = 1.67 MHz ) ' !jmp ocbasr12 '4 TZ / ' #ocbasr17 '6 ' !rts ' END PROC ' --- Programmende --------------------------------------------------------- Passender Link: Infosite zu den OM-Mikrocontrollern Meine Homepage: http://ccintern.dharlos.de |
Antwort schreiben |