Lowlevel
Lowlevel => Lowlevel-Coding => Thema gestartet von: WhiteDragon am 30. October 2005, 16:53
-
Hallo zusammen,
also man benötigt häufiger mal Zeitangaben oder Zeitmessungen. Bei Windows wird beispielsweise bei jedem Ereignis die Zeit mit angegeben, zu der das Ereignis stattfand.
Weiß einer, wie das genau gemacht wird? Holt man sich jedesmal die kompletten CMOS-Port-Angaben und berechnet daraus einen 32Bit-Wert mit der aktuellen Zeitangabe?
Kann man natürlich so machen, aber vielleicht kennt jemand ja eine bessere Methode...
-
Versuchs doch mal mit dem RDTSC Befehl, der schreibt die Anzahl der cycles seit dem Einschalten des Computers nach EDX:EAX.
MM
-
Ausserdem hast du mit PIT und RTC Methoden regelmäßig IRQs generieren zu lassen. Diese Zeiten kannst du aufsummieren. Beim Booten musst du natürlich einmal die aktuelle Zeit laden ...
-
Danke für eure Antworten. Diese Dinge hatte ich auch schon betrachtet, sie haben aber zwei gewichtige Nachteile:
RDTSC ist nur ab Pentium implementiert, ich möchte aber alles ab 386 unterstützen. Außerdem werden hier Takte gezählt, ich hätte aber am liebsten 100stel- oder 1000stel-Sekunden, da die Taktrate natürlich von Rechner zu Rechner unterschiedlich ist.
Mir wäre aber geholfen, falls jemand eine totsichere Methode kennt, wie ich heraus bekomme, wie viele Takte z.B. in einer Sekunde liegen!
Der Nachteil an der IRQ-Methode ist ein anderer: Die Interrupts werden immer mal wieder kurz ausgeschaltet, da würde die Zeitmessung eventuell ungenau werden.
Dennoch danke ich für eure Antworten! Hat jemand noch eine andere Idee?
-
Nun ja, sagen wir mal so, ob die CPU grad IRQs annimmt interessiert den PIT kein Stück.
-
Ich versteh nicht ganz: Willst du sagen, dass eine exakte Zeitmessung dennoch machbar ist? Wäre schön, wenn du das etwas vertiefen könntest, zumal hier scheinbar keine anderen Ideen vorhanden sind.
-
Wenn ein IRQ auftritt, wärend die IRQs deaktiviert sind, wird er sofort nach dem aktivieren der IRQs aufgerufen.
-
Richtig. Solange du nicht länger als 2 Zeitperioden brauchst gehen immerhin keine Sekunden verloren ...