Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Timer Interrupt IRQ0 als Ereignis (https://www.delphipraxis.net/145471-timer-interrupt-irq0-als-ereignis.html)

netpilots 2. Jan 2010 01:21


Timer Interrupt IRQ0 als Ereignis
 
Hallo Delphi Praktiker

Ist es möglich den Timer Interrupt (der mit den 18.2 Hz resp. jener der alle 55ms kommt) zu nutzen? Ich stelle mir das so vor wie den Keyboard- oder Mouse-Event der sich mittels Hook abfangen lässt oder man richtet sich was mit den Messages ein. Für diesen Timer finde ich nichts. Einen Zähler auslesen wäre auch praktisch so wie man das mit GetTickCount macht wenn man eine Auflösung von 1 ms, die aber ungenau sind, will. Das es sehr genau mit QueryPerformanceCounter machen lässt ist schon klar aber bei der Frage geht es um den Ur-Timer wie er schon seit Jahrzehnten bei Intel- und AMD-CPU basierten Board vorhanden ist.

Vielen Dank für die Anregungen

Astat 2. Jan 2010 03:18

Re: Timer Interrupt IRQ0 als Ereignis
 
Zitat:

Zitat von netpilots
Ist es möglich den Timer Interrupt (der mit den 18.2 Hz resp. jener der alle 55ms kommt) zu nutzen?

Hallo netpilots, der "Timer Interrupt (INT 8)" des 8254, oder eines compatiblen timer Chip, lässt sich "direkt" nur in Treibern verwenden. Indirekt, also im User-Mode, ist das Teil aber mit der timeGetTime API ansprechbar, ob das ab Vista geändert wurde weiss ich nicht. Könnte auch sein dass für die Api in neueren OS der CMOS real-time clock Interrupt (INT 70h) verwendet wird.
Welcher Interupt mit welcher TimerAPI verheiratet ist, sollte über MSDN - WinApi genauer zu erfahren sein.

Zitat:

Zitat von netpilots
Ich stelle mir das so vor wie den Keyboard- oder Mouse-Event der sich mittels Hook abfangen lässt oder man richtet sich was mit den Messages ein. Für diesen Timer finde ich nichts. Einen Zähler auslesen wäre auch praktisch so wie man das mit GetTickCount macht wenn man eine Auflösung von 1 ms, die aber ungenau sind, will.

Was willst du denn eigentlich genau machen, ist's nur Interesse oder brauchst du eine Software-Losung?

lg. Astat

netpilots 2. Jan 2010 21:29

Re: Timer Interrupt IRQ0 als Ereignis
 
Hallo Astat

Danke für die Informationen. Es ist das Interesse an der Theorie wie Frequenz 18.2 Hz resp. Periodendauer 55 ms wirklich entstanden sind und ob sich quarzgenaue Zeitsteuerungen damit realisieren lassen. Eigentlich sind es die Stellen nach dem Dezimalpunkt die interessieren. 18.2 ist nicht wirklich 18.2 wie man aus verschiedenen Dokumentationen nimmt.

Die Dokumentationen sind widersprüchlich, darum wollte ich selbst zählen und messen. Für Zeitsteuerungen (z.B. Warnung nach 58 Minuten dass die Stunde bald voll ist und neue Kosten für die UMTS Verbindung anfallen) werde ich was mit der internen Uhr und Funktionen wie 'now' rechnen lassen was sehr einfach ist.

Die Funktionen GetTickCount und timeGetTime bringen die gleichen Werte. Bei timeGetTime muss ich aber noch die Unit mmSystem laden.
Für Kurzzeitmessungen im ms Bereich eignen sie sich nicht, da nehme ich lieber QueryPerformanceCounter. Kann sein dass sich die Zeit für eine Stunde mit GetTickCount präzise rechnen lässt. Schauen wir mal ob ein Quarz dahinter steckt von dem die Counter abgeleitet wurden und ob sie wirklich unterbrechungsfrei und unabhängig laufen. Mit den Delphi Timern sind genaue Zeiten nicht möglich. Wenn ich einen Timer mit Interval 1000 (1s) 3600 Mal ablaufen lasse ist die Zeit bedenklich weit weg von einer Stunde. Dazu sind diese Timer ja auch nicht gemacht denke ich.

Dank Google sind die Theorien mit dem ersten PC 4.77 MHz und dem Teiler 65536 bekannt. Auch weshalb diese Frequenz 4.77 gewählt wurde steht irgendwo z.B. auch hier:
http://blogs.msdn.com/calvin_hsia/ar...12/213756.aspx

Noch ein Nachtrag. Hier könnte die richtige Folmel stehen Wegen dem Colorburst Quarz und den Teilern. http://marc.info/?l=linux-kernel&m=93344622609581&w=2

So wie ich es jetzt sehe wäre ein spezieller Treiber zu aufwändig um die 18.2 Hz zu zählen.
Gruss Netpilots

thkerkmann 2. Jan 2010 21:35

Re: Timer Interrupt IRQ0 als Ereignis
 
Dann würde ich das aber nicht versuchen über Windows zu untersuchen.

(MS) DOS ist das Urschwein des Betriebssystems auf dieser Hardware.

Und wenn man in alten Büchern über DOS und den Timer wühlt wird man da sicher fündig.

Gruss

netpilots 2. Jan 2010 21:56

Re: Timer Interrupt IRQ0 als Ereignis
 
Hast ja Recht, nur wo sind all die DOS Rechner die ich damals hatte ;-)

Gruss Netpilots

himitsu 2. Jan 2010 22:29

Re: Timer Interrupt IRQ0 als Ereignis
 
Eventuell könnte RDTSC (Read Time-Stamp Counter) auch interessant sein.

Früher war der mal mit dem Prozessortakt gleichzusetzen, aber seit 'ner Weile werden die wohl anders hochgezählt? :gruebel:
(vorallem sei es mehrere und vorallem dynamisch getacktete CPUs/Kerne in den PCs gibt)


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:05 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz