Hallo! Ich probrammiere eine Software, welche sowohl unter Windows wie auch unter Linux kompiliert werden können sollte. Deshalb verwende ich nur ANSI-C-Bibliotheken. Nun brauche ich einige Funktionen, mit denen ich Zeiten messen kann. Dazu gibt es z.B. die time.h, die liefert aber nur eine Auflösung von 1 Sekunde. Ich bräuchte etwas wo die Auslösung grösser ist. Muss nicht wahnsinnig genau sein, es soll nur entschieden werden können, ob ein Timeout aufgetreten ist (also z.B. T_neu > T_alt + 20 Millisekunden). Es macht also nichts wenn es nicht bis auf die letzte Millisekunde stimmt. Weiss da jemand etwas? Vielen Dank!
Da sollte es die Funktion clock geben. Die gibt einen Wert zurück, der auf CLOCKS_PER_SEC Bruchteile einer Sekunde genau ist. Wie hoch dieser Wert ist, ist implementierungsabhängig. Beides (der Prototyp von clock und die Konstante CLOCKS_PER_SEC) steht in time.h. Auf Win32 ist CLOCKS_PER_SEC üblicherweise 1000.
ANSI-C... Schade eigentlich. Unter Unix gibt es die Funktion "gettimeofday", die dir die Uhrzeit mit 1 us Auflösung liefert. Ist aber leider nicht ANSI-C. virtuPIC
Hat wunderbar geklappt, habt vielen Dank. BTW, was passiert wenn ich dies auf einem Mikrocontroller ausführen würde? Wenn wir ja schon in einem Mikrocontrollerforum sind. Gehe ich richtig in der Annahme, dass es da im Allgemeinen nicht funkionieren wird, weil sich der Compiler nicht selbständig an den Timern zu schaffen macht? Oder wird die Zeit auf eine andere Zeit gemessen? Hat ein PC-Prozessor auch so Timer wie ein Mikrocontroller? Fragen über Fragen...
Sicher hat ein µC Timer, aber die C-Runtime-Umgebung für einen µC enthält i.d.R. keine einzige der Funktionen aus time.h. Ein PC-Prozessor selbst hat keine Timer (wenn man mal die "performance counter" neuerer Prozessoren ignoriert), aber die sind, wie auch die ganze andere Peripherie, "off-chip" in der Umgebungselektronik ("Chipsatz") untergebracht. Die Standard-PC-Architektur verwendet hier den Timerbaustein i8254, der natürlich in jedem PC aus diesem Jahrtausend nur noch als IP-Core irgendwo im Chipsatz herumdümpelt.
> Die Standard-PC-Architektur verwendet hier den Timerbaustein i8254, der > natürlich in jedem PC aus diesem Jahrtausend nur noch als IP-Core > irgendwo im Chipsatz herumdümpelt. Aktuelle Systeme verwenden eher den HPET.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.