Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - Zum C-Control-I-Forum - Zum C-Control-II-Forum

Messen der Tackte von Anweisungen, usw. Kategorie: Programmierung Basic (von Ernst H. - 24.10.2010 19:15)
Ich nutze:
C-Control Pro Mega128, CC-Pro 128 Application Board, Pro-Bot128
Unten ein kurzes Programm zum messen von Laufzeiten - Anweisungen, Programmteile
Verwendet wird der 16-Bit Timer 1
Ergebnis: sehr enttäuschend!
Var = Var + 1     (Byte) benötigt  291 Takte!!!
++Var                                       260 Takte !!!

Sinus von einer single     etwa 3000   - ist ok, aber die einfachsten Anweisungen brauchen extrem
lange.      Das increment einer Bytevariable immer noch 260 Tackte wofür ????

Portausgabe eines Bytes  um die 400,  mit DirAcc_Write  direkt das Register beschreiben - denkste -
dauert genauso lange.
Entweder ich mache da einen ordentlichen Ã?berlegungsfehler (wird der Tackt intern geteilt?) oder das
Basic ist wirklich so langsam - vorallem bei einfachsten Befehlen?
Ã?brigens PortWriteByte soll wesentlich schneller sein als PortWriteBit -   etwa 400 zu etwa 550
macht man das "Ausmaskieren" des Bits händisch so kommt man sicher auf wesentlich mehr, da
jeder einfachste Befehl unsummen an Tackten friÃ?t.

Dim Zeitfloat As Single
Dim Timervar As Word


    AbsDelay(2 )                          ' unbedingt notwendig!!!
                                          ' nur mit 2ms Pause konstante
                                          ' Werte sonst 30-64us
   
    Timer_T1Time(65000,1)                 ' Startpunkt der Messung mit 67,8ns
   
            'hier die Prüf - Anweisungen oder ganze Programmteile
            'bis max 4,4ms
   
    Msg_Laufzeit1()                       ' Aufruf der Sub
    */
Sub Msg_Laufzeit1 ()                      ' Sub für Messung und Ausgabe
    Timervar = Timer_T1GetCNT() - 455     ' Korr-Wert wenn kein Befehle
    Msg_WriteText(" Nr1= ")
    Msg_WriteWord(Timervar )              ' Takte 67,8ns ... 14,..MHz
    Msg_WriteChar(32 )
    Zeitfloat = Timervar * 0.0678         ' Wert in us
    Msg_WriteFloat(Zeitfloat )
    Msg_WriteChar(32 )
End Sub







 AbsDelay(2 )                          ' unbedingt notwendig!!!
    Timer_T1Time(65000,5)                 ' Startpunkt der Messung mit 8,68usTakt
    Msg_Laufzeit128T()                    ' Aufruf der Sub
    */
Sub Msg_Laufzeit128T ()                   ' nur mit 2ms Pause konstante Werte !!
    Schleife = Schleife + 1 - 1           ' Zeitverbrauch damit wenige Takte abgezogen werden
    Timervar = Timer_T1GetCNT() - 1       ' Korrektur -1
    Msg_WriteText(" N128= ")              ' ******************bis zu 0,56sec  *********************************
    Msg_WriteWord(Timervar )              ' 128 Takte 8,68us ...
    Msg_WriteChar(32)
    Zeitfloat = Timervar * 0.00868         ' Wert in ms!
    Msg_WriteFloat(Zeitfloat )
    Msg_WriteText("ms")
    Msg_WriteChar(32)
    'Msg_WriteChar(13)                     ' CR  Zeilenvorschub
End Sub


    Antwort schreiben


Antworten:

Re: Messen der Tackte von Anweisungen, usw. (von PeterS - 29.10.2010 9:42)
    Re: Messen der Tackte von Anweisungen, usw. (von Ernst H. - 29.10.2010 22:47)