Das Open-Control-Projekt - Die Alternative zur C-Control-I


Das Forum zur C-Control-1
Welche C-Control-Varianten existieren?
Übersicht - Suchen - Neueste 50 Beiträge - Neuer Beitrag - Login - Registrieren
INFO - FAQ - CC2-Forum - CCPro-Forum 

 Mittelwertbildung und OCBASR Kategorie: Open-Micro/Open-Mini/Open-Midi/Open-Macro/Open-Maxi (von Dietmar, Homepage - 22.07.2025 15:55)
 Als Antwort auf Mittelwertbildung von Dietmar - 22.07.2025 15:52
Dietmar nutzt:  Open-Micro, Open-Mini, Open-Midi, Open-Macro, Open-Maxi, Open-Mini Station
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)"

PRINT
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
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

Bisherige Antworten: