
|
INFO - FAQ - CC2-Forum - CCPro-Forum |
|
||
|
Hallo zusammen, mit Hilfe des echten BASIC-Compilers OCBASR habe ich den Sourcecode beschleunigt. Inklusive Mittelwertbildung benötigt der Code nur noch 960 ms. Unten bei "Passender Link" habe ich den gesamten von mir verwendeten Sourcecode verlinkt. Freundliche Grüße Dietmar ' ----------------------------------------------------------------------- ' Statistik-Challenge: Auswertung Aufrufzahlen des C-Control/Intern Forum ' von Beitrag 1 bis 18165 - mit ansteigender Funktionalitaet. Mitmachen! ' Unter 1,6 Sekunden bleiben. Weitere Informationen im Forum (siehe Link). ' Link: https://ccintern.dharlos.de/forum/lesen.php?eintrag=18129 ' ------------------------------------------------------------------------ ' Ermittlung des Mittelwerts mittels "Grundrechenarten in 32 Bit" und ' Beschleunigung mittels echtem Open-Control/BASIC-Compiler OCBASR. ' ------------------------------------------------------------------------ 'option OPENMAXI INCLUDE "omax.def" 'Definitionen fuer die Open-Maxi ' --- Definitionen für "Grundrechenarten in 32 Bit" ------------------------- DEFINE a AS LONG 'Erster 32-Bit-Akkumulator (1. Operand & Rechenergebnis) DEFINE b AS LONG 'Zweiter 32-Bit-Akkumulator (2. Operand) DEFINE c AS LONG 'Dritter 32-Bit-Akkumulator (temp. fuer DIV und PRINT32) DEFINE a1 AS BYTE[1] OF a 'LSB 'fuer den Zugriff in BASIC DEFINE a2 AS BYTE[2] OF a DEFINE a3 AS BYTE[3] OF a DEFINE a4 AS BYTE[4] OF a 'MSB DEFINE alw AS WORD[1] OF a 'LSW 'fuer den Zugriff in BASIC DEFINE ahw AS WORD[2] OF a 'MSW DEFINE b1 AS BYTE[1] OF b 'fuer den Zugriff in BASIC DEFINE b2 AS BYTE[2] OF b DEFINE b3 AS BYTE[3] OF b DEFINE b4 AS BYTE[4] OF b DEFINE blw AS WORD[1] OF b 'LSW 'fuer den Zugriff in BASIC DEFINE bhw AS WORD[2] OF b 'MSW ' --------------------------------------------------------------------------- DEFINE c_MAX_BEITRAG_ID 18165 DEFINE c_MIN_BEITRAG_ID 1 DEFINE beitragsnummer, systicks_start, systicks_finish, systicks_elapsed, mittelwert, wieoftabgerufen, meist_wieoft, meist_beitrag AS WORD 'PrintSpc=ON 'Bei PRINT dezimale Zahlen mit führendem Leerzeichen ausgeben 'define End2Host ivar [88] ' bei END in den Hostmodus (unabh. vom START-Pin) End2Host=ON ?"OXFSTAT0.BAS.ocb ":? 'Erste PRINT String Anweisung im Quelltext als Label nutzen (Lbit-Konvention). PRINT "Beginne Auswertung... ("; c_MAX_BEITRAG_ID ;" Beitraege)" systicks_start=timer GOSUB work #Auswertung systicks_finish=timer systicks_elapsed=systicks_finish-systicks_start PRINT "Zeitbedarf ca. "; IF systicks_elapsed >-1 AND systicks_elapsed <=1638 THEN PRINT systicks_elapsed*20; ELSE PRINT"(?)"; 'Ueberlauf, bei mehr als 32 Sekunden Programmlaufzeit... ENDIF PRINT " ms" PRINT "Zeitnahme(raw): ";systicks_start;",";systicks_finish;",";systicks_elapsed PRINT "MIN_BEITRAG_ID: ";c_MIN_BEITRAG_ID PRINT "MAX_BEITRAG_ID: ";c_MAX_BEITRAG_ID PRINT "Analyse bis ID: ";beitragsnummer - c_MIN_BEITRAG_ID +1 PRINT "'Hirunner:' ID: ";meist_beitrag PRINT " |____ Aufrufe: ";meist_wieoft PRINT "Summe : ";:print32:? bhw=0 blw=c_MAX_BEITRAG_ID dividieren PRINT "Mittelwert : ";:print32:? #Ende ?:? "Auswertung beendet - Hostmodus" END ' --- Subroutine mit dem COMPILE-Schlüsselwort für OCBASR 4.1 --------------- PROCEDURE work COMPILE ahw=0 alw=0 FOR beitragsnummer=c_MIN_BEITRAG_ID TO c_MAX_BEITRAG_ID LOOKTAB Anzahl_Aufrufe_3,beitragsnummer,wieoftabgerufen bhw=0 blw=wieoftabgerufen SYS addieren 'Zeitbedarf ca. 960 ms ' ?beitragsnummer;" ";wieoftabgerufen;" "; ' print32 ' ? IF wieoftabgerufen > meist_wieoft THEN meist_wieoft=wieoftabgerufen meist_beitrag=beitragsnummer ENDIF NEXT RETURN END PROCEDURE ' --------------------------------------------------------------------------- Include "aufrufe3.tab" ' Die Tabelle "Anzahl_Aufrufe_3" wird extern via Include "aufrufe3.tab" ' geladen. Die nachfolgend eingeklammerte Tabelle dient nur der Simulation ' bei Entwicklung. ' TABLE Anzahl_Aufrufe_3 ' c_MAX_BEITRAG_ID ' TABEND ' --------------------------------------------------------------------------- INCLUDE "32BITASM.PRO" 'INCLUDE-Datei für 32-Bit-Arithmetik ' --------------------------------------------------------------------------- INCLUDE "OM_FW.PRO" 'INCLUDE-Datei für Firmwareroutinen ' -------------------------------------------------------------------------- Passender Link: OXFSTAT0_mittel_compile.zip Meine Homepage: http://ccintern.dharlos.de |
| Antwort schreiben |