Seite 11 von 16
Verfasst: 31.08.2005 14:26
von hardfalcon
Danke für die (wie immer schnelle) Antwort! Ich hab grade einen HighRes-Timer in Planung... (-> Anfängerforum)
Verfasst: 31.08.2005 14:30
von Kiffi
> Ich hab grade einen HighRes-Timer in Planung...
den gibt's allerdings schon von Danilo in den PBOSL -> Timer.
Wie Thomas schon schrieb: Schau Dir erstmal an, was alles so in den PBOSL vorhanden ist
Grüße ... Kiffi
Verfasst: 31.08.2005 14:40
von hardfalcon
Mein Timer hat eher die Funktion von ElapsedMilliseconds(), aber mit einer VIEL höheren Auflösung (nämlich der Herzzahl des Quarzes, der für den Timer benutzt wird).
Verfasst: 31.08.2005 15:35
von ts-soft
Eine höhere Auflösung, als die des HighResTimers ist meines Wissens nach nur mit zusätzlicher Hardware möglich. Ansonsten gibts dazu auch noch einen PB-Source:
Code: Alles auswählen
; Idea from Erix14 / Djes
; Return the time elapsed between Start & Stop in second
; 0.001 = 1 ms
; 0.000001=1 µs
; Caution ! : If the installed hardware supports a high-resolution performance counter
; MeasureHiResIntervalStart return 1 / 0 if no hardware support
; Use this functions for measure interval < 1 ms
Global MeasureHiResIntervalTime.l
ProcedureDLL MeasureHiResIntervalStart()
QueryPerformanceFrequency_(@retour)
If retour <>0 : retour = 1 : EndIf
QueryPerformanceCounter_(@MeasureHiResIntervalTime)
ProcedureReturn retour
EndProcedure
ProcedureDLL.f MeasureHiResIntervalStop()
QueryPerformanceCounter_(@Temp)
Difference=Temp-MeasureHiResIntervalTime
QueryPerformanceFrequency_(@HiResTimerFrequency)
Periode.f=1/HiResTimerFrequency
DureeTotale.f=Difference*Periode
ProcedureReturn DureeTotale
EndProcedure
Auszug aus Droopy's Lib
Verfasst: 31.08.2005 18:43
von MARTIN
nämlich der Herzzahl des Quarzes, der für den Timer benutzt wird
Ich glaube hardfalcon meint auch einen externen Timer, sonst ist braucht man doch kein Quarz.
Verfasst: 31.08.2005 18:51
von ts-soft
Er meint schon den HighResTimer, siehe hier:
http://forums.purebasic.com/german/viewtopic.php?t=4625
Bloß der wird ja in der Timer Lib des PBOSL schon verwendet

Verfasst: 31.08.2005 19:39
von hardfalcon
ts-soft hat Recht bis auf folgenden Punkt:
Das Einsatzgebiet meines Timers. Droopy's/Danilo's Timer können ja nur die Zeit stoppen, die zwischen StartTimer() und StopTimer() vergeht. Mein Timer soll jedoch ein (besserer) Ersatz für ElapsedMilliseconds() werden.
Verfasst: 31.08.2005 22:25
von MARTIN
Was meinst du dann mit dem "Quarz" ?
Verfasst: 01.09.2005 07:38
von hardfalcon
Was, glaubst du wohl, nimmt dein PC als Basis für seinen Timer? Glaubst du, der fragt hinter deinem Rücken per WLan den Funkwecker aufm Schreibtisch ab?
Natürlich hat dein PC auch ein Quarz (meist sogar mehrere) auf dem Motherboard verlötet. Mach mal den tower auf, und suche auf dem Motherboard nach 4-5mm breiten, 10-20mm langen, ovalförmigen "Weissblechpillen". Das sind die Quarze in deinem PC. Der Timer hat in einem PC noch ganz andere Aufgaben als nur die Zeitberechnung. Z.b. braucht man den Timer auch, um einen Befehl wie "Beep_()" in ASM umzusetzen. Ich bin mir nicht sicher, aber es kann sein, dass der PC sogar die Prozessorgeschwindigkeit mit Hilfe eines Quarzes definiert...

Verfasst: 01.09.2005 09:31
von mueckerich
mal eine rein technische Frage.
Der Quarz (Oszillator) ist der eigentlich der Herzschlag der CPU, alle Aktionen der CPU laufen in diesem Takt, das heißt es gibt Maschinenbefehle die brauchen 1-x Takte um abgearbeitet zu werden. Dieser Takt stellt eigentlich die Zeitbasis (nicht zu verwechseln mit der Zeit des RTC-Bausteins) für dein System dar. Wie willst Du da die Quarzfrequenz sicher ermitteln, wenn die unterschiedlichen ASM Befehle, aus denen Dein Prog besteht, n Taktzyklen zum abarbeiten brauchen. Du kannst auch nicht die Zeit zwischen 2 Takten messen, da du dafür ja einen andere Referenz bräuchtest da die CPU in der Zeit ja nix über die tatsächlich vergangene Zeit mitkriegt. Selbst wenn du die Takte innerhalb einer bestimmten Zeit (Torzeit in de Elektronik genannt) zählen wolltest brauchst du etwas, was schneller rechnet oder eine reine Hardwarelösung. Ich kann meine Takte nicht selbst Zählen, wenn ich für jedes Zählen mehrere Takte benötige. Die Taktfrequenz die Dir die CPU zurückmeldet wird nämlich rein Hardwäremäßig erfasst und ist auch nur so ein "Pi mal Daumen" Wert, die bauen da ja keinen hochgenauen Frequenzzähler für eine menge Kohle ein. Und für einen gnadenlos hochauflösenden Timer ist eine Taktzeitschätzung ja wohl unbrauchbar.