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 Kategorie: Open-Micro/Open-Mini/Open-Midi/Open-Macro/Open-Maxi (von Dietmar, Homepage - 22.07.2025 15:52)
 Als Antwort auf Statistik-Challenge: von 0 auf 18.165 ...in <1,6 Sekunden! von das |_ Team - 17.07.2025 16:11
Dietmar nutzt:  Open-Micro, Open-Mini, Open-Midi, Open-Macro, Open-Maxi, Open-Mini Station
Hallo zusammen,

mit Hilfe der "Grundrechenarten in 32 Bit für Open-Macro und Open-Maxi" habe ich den Sourcecode um eine Mittelwertbildung ergänzt.

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".
' ------------------------------------------------------------------------

'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


   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
'      addieren     'Zeitbedarf ca. 2240 ms
      SYS addieren 'Zeitbedarf ca. 2100 ms

'      ?beitragsnummer;" ";wieoftabgerufen;" ";
'      print32
'      ?

      IF wieoftabgerufen > meist_wieoft THEN

        meist_wieoft=wieoftabgerufen
        meist_beitrag=beitragsnummer

      ENDIF

      IF rxd THEN Auswertung

   NEXT




#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

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.zip

Meine Homepage: http://ccintern.dharlos.de

 Antwort schreiben

Bisherige Antworten:

Mittelwertbildung und OCBASR (von Dietmar - 22.07.2025 15:55)