Messen der Tackte von Anweisungen, usw. Kategorie: Programmierung Basic (von Ernst H. - 24.10.2010 19:15) | ||
| ||
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) |
Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - Zum C-Control-I-Forum - Zum C-Control-II-Forum