Re: Messen der Tackte von Anweisungen, usw. Kategorie: Programmierung Basic (von Ernst H. - 29.10.2010 22:47) | ||
Als Antwort auf Re: Messen der Tackte von Anweisungen, usw. von PeterS - 29.10.2010 9:42 | ||
| ||
/* Ich habe nochmals getestet, das Ergebnis eindeutig ++Var (Byte) benötigt 260 Takte. Auch mit Logik-Analyser Test 3 und 4: Impuls mit ++Var 52us ohne 36us also ca. die berechneten 17us. Differenz Test3 und 4 exakt 260 Takte. Weitere Bemerkung PortWriteBit durch selbermachen (DirAcc.. lesen,maskieren,ausgabe)ist um als 130 Takte langsamer - bei gleichzeitig mehreren Bits - wieder effektiver. if / Case schon ein grosser Unterschied Messwertausgabe ab und zu kommen mehr Takte heraus, vermutlich interne Interruptverarbeitungen. Weniger allerdings nie. Var=Var+1 hier 335 Takte habe ich mit anderen Programm schon mal 291 herausbekommen? ADC_Set(ADC_VREF_VCC,0) ADC_0 = ADC_Read() 'Takte= 4008 271.742401us Takte= 2397 162.516601us Takte= 2382 161.499us 'beim ersten Aufruf 4008, dann nurmehr ca 2380 Messwertausgabe Mess1 ++Var (Byte) Takte= 260 17.628000us Takte= 260 17.628000us Mess2 Var=Var+1 (Byte) Takte= 335 22.712999us Takte= 335 22.712999us Mess3 2xPort_WriteBit Takte= 1036 70.240798us Takte= 1036 70.240798us Mess4 2xPort_WriteBit ++Var Takte= 1296 87.868797us Takte= 1296 87.868797us Mess5 Port_Write Takte= 441 29.899799us Takte= 441 29.899799us Mess6 DirAcc_Write Takte= 434 29.425199us Takte= 434 29.425199us Mess7 PortBit Eigenbau Takte= 648 43.934398us Takte= 648 43.934398us Mess8 Port_WriteBit Takte= 518 35.120399us Takte= 518 35.120399us Mess9 Schleife 10000 N128= 4520 39.233600ms N128= 4519 39.224918ms Mess10 ULong=Ulong+1 Takte= 484 32.815200us Takte= 484 32.815200us Mess11 ULong vergleich Takte= 713 48.341400us Takte= 713 48.341400us Mess12 Byte Vergleich Takte= 372 25.221599us Takte= 372 25.221599us Mess13 ADC abfrage Takte= 4008 271.742401us Takte= 2448 165.974395us Mess14 Case abfrage Takte= 906 61.426799us Takte= 906 61.426799us Mess15 If abfrage Takte= 2380 161.363998us Takte= 2380 161.363998us Mess9 mit langsameren Takt - dh die 4520*128=578560 Takte daher in ms Fertiges Programm zum Ausgeben von Messungen -einfach starten- Ergebnis erscheint an Konsole */ Dim Zeitfloat As Single Dim Timervar As Word Dim Var As Byte ' für Tests Nr1 ++Var, und Var=Var+1 Dim Var2 As Byte Dim i As Integer ' For Schleife Dim Schleife As Integer Dim Longvar As ULong Dim Longvar2 As ULong Dim Pausenzeit As Word Dim ADC_0 As Word #define Pausenzeit 2000 '2sec Pause zwischen den Messungen #define Duchlaufe 3 Sub main() Do While (1) Port_DataDir(PortC,255 ) 'PortC alles Output.. zum Messen Msg_WriteText("Mess1 ++Var (Byte) " ) For i = 1 To Duchlaufe 'für 3-malige Ausgabe in einer Zeile AbsDelay(2 ) ' unbedingt notwendig!!! nur mit 2ms Pause konstante Werte Timer_T1Time(65000,1) ' Startpunkt der Messung 67,8ns Takt Cnt1 = 0 'bei 65000 wird Int ausgelöst, hier nicht verwendet ++Var 'hier die Prüf - Anweisungen oder ganze Programmteile 'bis max 4,4ms 67,8ns Takt = 14,..MHz Msg_Laufzeit1() ' Aufruf der Sub (Cnt Auslesung und Korrektur) Next Msg_WriteChar(13) 'CR ... Neue Zeile AbsDelay(Pausenzeit ) 'Zeit zum ablesen 'nun Test2: Msg_WriteText("Mess2 Var=Var+1 (Byte) " ) For i = 1 To Duchlaufe 'für 3-malige Ausgabe in einer Zeile AbsDelay(2 ) ' unbedingt notwendig!!! nur mit 2ms Pause konstante Werte Timer_T1Time(65000,1) ' Startpunkt der Messung 67,8ns Takt Cnt1 = 0 Var=Var+1 'hier die Prüf - Anweisungen oder ganze Programmteile 'bis max 4,4ms 67,8ns Takt = 14,..MHz Msg_Laufzeit1() ' Aufruf der Sub (Cnt Auslesung und Korrektur) Next Msg_WriteChar(13) 'CR ... Neue Zeile AbsDelay(Pausenzeit ) 'Zeit zum ablesen 'nun Test3: Msg_WriteText("Mess3 2xPort_WriteBit " ) For i = 1 To Duchlaufe 'für 3-malige Ausgabe in einer Zeile AbsDelay(2 ) ' unbedingt notwendig!!! nur mit 2ms Pause konstante Werte Timer_T1Time(65000,1) ' Startpunkt der Messung 67,8ns Takt Cnt1 = 0 Port_WriteBit(20,1) 'hier die Prüf - Anweisungen oder ganze Programmt. Port_WriteBit(20,0) 'PortC.4 auf 0 'bis max 4,4ms 67,8ns Takt = 14,..MHz Msg_Laufzeit1() ' Aufruf der Sub (Cnt Auslesung und Korrektur) Next Msg_WriteChar(13) 'CR ... Neue Zeile AbsDelay(Pausenzeit ) 'Zeit zum ablesen 'nun Test4: Msg_WriteText("Mess4 2xPort_WriteBit ++Var" ) For i = 1 To Duchlaufe 'für 3-malige Ausgabe in einer Zeile AbsDelay(2 ) ' unbedingt notwendig!!! nur mit 2ms Pause konstante Werte Timer_T1Time(65000,1) ' Startpunkt der Messung 67,8ns Takt Cnt1 = 0 Port_WriteBit(20,1) 'hier die Prüf - Anweisungen oder ganze Programmt. ++Var 'mit Logkanalyser können die zusätzlichen 260Takte.. Port_WriteBit(20,0) 'bis max 4,4ms 67,8ns Takt = 14,..MHz Msg_Laufzeit1() ' Aufruf der Sub (Cnt Auslesung und Korrektur) Next Msg_WriteChar(13) 'CR ... Neue Zeile AbsDelay(Pausenzeit ) 'Zeit zum ablesen 'nun Test5: Msg_WriteText("Mess5 Port_Write " ) For i = 1 To Duchlaufe 'für 3-malige Ausgabe in einer Zeile AbsDelay(2 ) ' unbedingt notwendig!!! nur mit 2ms Pause konstante Werte Timer_T1Time(65000,1) ' Startpunkt der Messung 67,8ns Takt Cnt1 = 0 Port_Write(PortC,255 ) 'hier die Prüf - Anweisungen oder ganze Programmt. 'bis max 4,4ms 67,8ns Takt = 14,7456MHz Msg_Laufzeit1() ' Aufruf der Sub (Cnt Auslesung und Korrektur) Next Msg_WriteChar(13) 'CR ... Neue Zeile AbsDelay(Pausenzeit ) 'Zeit zum ablesen 'nun Test6: Msg_WriteText("Mess6 DirAcc_Write " ) For i = 1 To Duchlaufe 'für 3-malige Ausgabe in einer Zeile AbsDelay(2 ) ' unbedingt notwendig!!! nur mit 2ms Pause konstante Werte Timer_T1Time(65000,1) ' Startpunkt der Messung 67,8ns Takt Cnt1 = 0 DirAcc_Write(0x35,255 ) 'hier die Prüf - Anweisungen oder ganze Progr. 'bis max 4,4ms 67,8ns Takt = 14,..MHz Msg_Laufzeit1() ' Aufruf der Sub (Cnt Auslesung und Korrektur) Next Msg_WriteChar(13) 'CR ... Neue Zeile AbsDelay(Pausenzeit ) 'Zeit zum ablesen 'nun Test7: Msg_WriteText("Mess7 PortBit Eigenbau " ) For i = 1 To Duchlaufe 'für 3-malige Ausgabe in einer Zeile AbsDelay(2 ) ' unbedingt notwendig!!! nur mit 2ms Pause konstante Werte Timer_T1Time(65000,1) ' Startpunkt der Messung 67,8ns Takt Cnt1 = 0 DirAcc_Write(0x35,DirAcc_Read(0x35 Or 00010000 ) ) 'das PortC Register wird gelesen maskiert und damit Bit 4 gesetzt 'hier die Prüf - Anweisungen oder ganze Programmteile 'bis max 4,4ms 67,8ns Takt = 14,..MHz Msg_Laufzeit1() ' Aufruf der Sub (Cnt Auslesung und Korrektur) Next Msg_WriteChar(13) 'CR ... Neue Zeile AbsDelay(Pausenzeit ) 'Zeit zum ablesen 'nun Test8: Msg_WriteText("Mess8 Port_WriteBit " ) For i = 1 To Duchlaufe 'für 3-malige Ausgabe in einer Zeile AbsDelay(2 ) ' unbedingt notwendig!!! nur mit 2ms Pause konstante Werte Timer_T1Time(65000,1) ' Startpunkt der Messung 67,8ns Takt Cnt1 = 0 Port_WriteBit(20,1) 'hier die Prüf - Anweisungen oder ganze Programmt. 'bis max 4,4ms 67,8ns Takt = 14,..MHz Msg_Laufzeit1() ' Aufruf der Sub (Cnt Auslesung und Korrektur) Next Msg_WriteChar(13) 'CR ... Neue Zeile AbsDelay(Pausenzeit ) 'Zeit zum ablesen 'nun Test9: hier langsamerer Takt: 8,68us Msg_WriteText("Mess9 Schleife 10000 " ) For i = 1 To Duchlaufe 'für 3-malige Ausgabe in einer Zeile AbsDelay(2 ) ' unbedingt notwendig!!! nur mit 2ms Pause konstante Werte Timer_T1Time(65000,5) ' Startpunkt der Messung mit 8,68usTakt For Schleife = 1 To 10000'hier die Prüf - Anweisungen oder ganze Progr. ++Var Next 'bis zu 0,56sec Msg_Laufzeit128T() ' Aufruf der Sub (Cnt Auslesung und Korrektur) Next Msg_WriteChar(13) 'CR ... Neue Zeile AbsDelay(Pausenzeit ) 'Zeit zum ablesen 'nun Test10: Msg_WriteText("Mess10 ULong=Ulong+1 " ) Longvar = 4294967294 ' damit in 2. Durchlauf ein �berlauf entsteht For i = 1 To Duchlaufe 'für 3-malige Ausgabe in einer Zeile AbsDelay(2 ) ' unbedingt notwendig!!! nur mit 2ms Pause konstante Werte Timer_T1Time(65000,1) ' Startpunkt der Messung 67,8ns Takt Cnt1 = 0 'hier die Prüf - Anweisungen oder ganze Programmteile Longvar = Longvar + 1 'bis max 4,4ms 67,8ns Takt = 14,..MHz Msg_Laufzeit1() ' Aufruf der Sub (Cnt Auslesung und Korrektur) Next Msg_WriteChar(13) 'CR ... Neue Zeile AbsDelay(Pausenzeit ) 'Zeit zum ablesen 'nun Test11: Msg_WriteText("Mess11 ULong vergleich " ) Longvar = 4294967000 ' Longvar = 4294967010 'eine hohe Zahl - es müssen alle 32 Bits vergl. For i = 1 To Duchlaufe 'für 3-malige Ausgabe in einer Zeile AbsDelay(2 ) ' unbedingt notwendig!!! nur mit 2ms Pause konstante Werte Timer_T1Time(65000,1) ' Startpunkt der Messung 67,8ns Takt Cnt1 = 0 'hier die Prüf - Anweisungen oder ganze Programmteile If Longvar2 < Longvar Then 'bis max 4,4ms 67,8ns Takt = 14,..MHz ++Var ' hier vergleich nicht erfüllt, Var bleibt gleich End If Msg_Laufzeit1() ' Aufruf der Sub (Cnt Auslesung und Korrektur) Next Msg_WriteChar(13) 'CR ... Neue Zeile AbsDelay(Pausenzeit ) 'Zeit zum ablesen 'nun Test12: Msg_WriteText("Mess12 Byte Vergleich " ) Var = 222 ' Var2 = 243 ' For i = 1 To Duchlaufe 'für 3-malige Ausgabe in einer Zeile AbsDelay(2 ) ' unbedingt notwendig!!! nur mit 2ms Pause konstante Werte Timer_T1Time(65000,1) ' Startpunkt der Messung 67,8ns Takt Cnt1 = 0 'hier die Prüf - Anweisungen oder ganze Programmteile If Var2 < Var Then 'bis max 4,4ms 67,8ns Takt = 14,..MHz ++Var ' hier vergleich nicht erfüllt, Var bleibt gleich End If Msg_Laufzeit1() ' Aufruf der Sub (Cnt Auslesung und Korrektur) Next Msg_WriteChar(13) 'CR ... Neue Zeile AbsDelay(Pausenzeit ) 'Zeit zum ablesen 'nun Test13: Msg_WriteText("Mess13 ADC abfrage " ) ' For i = 1 To Duchlaufe 'für 3-malige Ausgabe in einer Zeile AbsDelay(2 ) ' unbedingt notwendig!!! nur mit 2ms Pause konstante Werte Timer_T1Time(65000,1) ' Startpunkt der Messung 67,8ns Takt Cnt1 = 0 'hier die Prüf - Anweisungen oder ganze Programmteile ADC_Set(ADC_VREF_VCC,0) ADC_0 = ADC_Read() 'Takte= 4008 271.742401us Takte= 2397 162.516601us Takte= 2382 161.49.. 'beim ersten Aufruf 4008, dann nurmehr ca 2380 Msg_Laufzeit1() ' Aufruf der Sub (Cnt Auslesung und Korrektur) Next Msg_WriteChar(13) 'CR ... Neue Zeile AbsDelay(Pausenzeit ) 'Zeit zum ablesen 'nun Test14: Msg_WriteText("Mess14 Case abfrage " ) ' Var=5 For i = 1 To Duchlaufe 'für 3-malige Ausgabe in einer Zeile AbsDelay(2 ) ' unbedingt notwendig!!! nur mit 2ms Pause konstante Werte Timer_T1Time(65000,1) ' Startpunkt der Messung 67,8ns Takt Cnt1 = 0 'hier die Prüf - Anweisungen oder ganze Programmteile Select Case Var Case 1 ++Var2 Case 2 ++Var2 Case 3 ++Var2 Case 4 ++Var2 Case 5 ++Var2 Case 6 ++Var2 End Select Msg_Laufzeit1() ' Aufruf der Sub (Cnt Auslesung und Korrektur) Next Msg_WriteChar(13) 'CR ... Neue Zeile AbsDelay(Pausenzeit ) 'Zeit zum ablesen 'nun Test15: Msg_WriteText("Mess15 If abfrage " ) ' Var=5 For i = 1 To Duchlaufe 'für 3-malige Ausgabe in einer Zeile AbsDelay(2 ) ' unbedingt notwendig!!! nur mit 2ms Pause konstante Werte Timer_T1Time(65000,1) ' Startpunkt der Messung 67,8ns Takt Cnt1 = 0 'hier die Prüf - Anweisungen oder ganze Programmteile If Var = 1 Then ++Var2 End If If Var = 2 Then ++Var2 End If If Var = 3 Then ++Var2 End If If Var = 4 Then ++Var2 End If If Var = 5 Then ++Var2 End If If Var = 6 Then ++Var2 End If 'ist nicht exakt mit obiger Case vergleichbar, aber ähnlich Msg_Laufzeit1() ' Aufruf der Sub (Cnt Auslesung und Korrektur) Next Msg_WriteChar(13) 'CR ... Neue Zeile AbsDelay(Pausenzeit ) 'Zeit zum ablesen Msg_WriteChar(13) 'CR ... Neue Zeile letzte Zusatzzeile End While End Sub 'main ************************************ Sub Msg_Laufzeit1 () ' Sub für Messung und Ausgabe Timervar = Timer_T1GetCNT() - 455 ' Korr-Wert wenn kein Befehle Msg_WriteText(" Takte= ") Msg_WriteWord(Timervar ) ' Takte 67,8ns ... 14,..MHz Msg_WriteChar(32 ) Zeitfloat = Timervar * 0.0678 ' Wert in us Msg_WriteFloat(Zeitfloat ) Msg_WriteText("us" ) Msg_WriteChar(32 ) End Sub /* AbsDelay(2 ) ' unbedingt notwendig!!! Timer_T1Time(65000,1) ' Startpunkt der Messung Msg_Laufzeit2() ' Aufruf der Sub */ Sub Msg_Laufzeit2 () ' nur mit 2ms Pause konstante Timervar = Timer_T1GetCNT() - 455 ' Werte sonst 30-64us Msg_WriteText(" Nr2= ") 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,1) ' Startpunkt der Messung Msg_Laufzeit1() ' Aufruf der Sub */ Sub Msg_Laufzeit3 () ' nur mit 2ms Pause konstante Timervar = Timer_T1GetCNT() - 455 ' Werte sonst 30-64us Msg_WriteText(" Nr3= ") 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,1) ' Startpunkt der Messung Msg_Laufzeit4() ' Aufruf der Sub */ Sub Msg_Laufzeit4 () ' nur mit 2ms Pause konstante Timervar = Timer_T1GetCNT() - 455 ' Werte sonst 30-64us Msg_WriteText(" Nr4= ") Msg_WriteWord(Timervar ) ' Takte 67,8ns ... 14,..MHz Msg_WriteChar(32) Zeitfloat = Timervar * 0.0678 ' Wert in us Msg_WriteFloat(Zeitfloat ) Msg_WriteChar(32) 'Msg_WriteChar(13) ' CR Zeilenvorschub 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 am Beginn konstante Werte !! Schleife = Schleife + 1 - 1 ' Zeitverbrauch damit wenige Takte abgezogen 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 /* AbsDelay(2 ) ' unbedingt notwendig!!! Timer_T1Time(65000,7) ' Startpunkt der Messung mit 69,44usTakt ************* Achtung Vor-Teiler 6 und 7 geht nicht! Msg_Laufzeit1024T() ' Aufruf der Sub */ Sub Msg_Laufzeit1024T () ' nur mit 2ms Pause konstante Werte!! Timervar = Timer_T1GetCNT() '- 455 ' Msg_WriteText(" N1024= ") ' bis zu 4,485sec Msg_WriteWord(Timervar ) ' 1024 Takte 69,44us ... Msg_WriteChar(32) Zeitfloat = Timervar * 0.06944 ' Wert in ms! Msg_WriteFloat(Zeitfloat ) Msg_WriteText("ms") Msg_WriteChar(32) Msg_WriteChar(13) ' CR Zeilenvorschub End Sub > Hallo Ernst, > > Deine gemessenen Takte sind zu hoch, allerdings verbrauchen Bytecodes Instruktionen > je nach Komplexität tatsächlich 30+ Taktzyklen. Das liegt an der Harvard Architektur > der Atmel Megas, die den Zugriff auf das Flash limitieren. Hat man im Zugriff auf das RAM > mehrere Adressmodi und kann indiziert über X,Y,Z zugreifen, so kennt der Flashzugriff > leider nur eine Zugriffsart. Deshalb braucht alleine der Fetch Bytecode, Lookup + Sprung > in die Bytecode Routine ca. 30 Taktzyklen. > > Wenn ich dazu komme, werde ich noch ausführlicher vorstellen, was ein "Var++" oder "Var=Var+1" > an Bytecodes benötigt. Veröffentliche doch mal das komplette Programm, wo Du die Taktzyklen > mi�t. > > Die neue Beta hat auch in der Geschwindigkeit Optimierungen, ich schätze das die Version ca. > 5-10% schneller geworden ist. > > Der Atmel AVR32 hat Spezialbefehle für den Table Einsprung, dort wird die Bytecodeabarbeitung > vorraussichtlich ca. 8x-10x schneller werden. > > Gruss Peter > > > 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: |
Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - Zum C-Control-I-Forum - Zum C-Control-II-Forum