1ms Timer unter Windows einrichten

Liebe/-r Experte/-in,

folgendes Problem. Ich habe ein Windows Embedded CE 6.0 System für welches ich eine Applikationssoftware schreibe. Ich benötige eine Timer welcher alle 1ms mir einen Interrupt liefert. Versuche mit dem WM_TIMER Message waren zu ungenau.
Jetzt bin ich dabei den QueryPerformanceCounter zu verwenden, aber scheitere daran, da ich nicht genau weiß, wo genau und wie ich diesen in meinem Code einbauen muss.

Vielleicht hat jemand von ihnen einen BeispielCode oder noch weitere Ideen und Anregungen.

Vielen Dank

Ich benötige eine Timer welcher alle 1ms mir einen Interrupt liefert

Das wird nicht funktionieren, da der Prozesswechel-Intervall bereits länger ist…

MFG

Liebe/-r Experte/-in,

folgendes Problem. Ich habe ein Windows Embedded CE

6.0 System

für welches ich eine Applikationssoftware schreibe.

Ich

benötige eine Timer welcher alle 1ms mir einen

Interrupt

liefert. Versuche mit dem WM_TIMER Message waren zu

ungenau.

Jetzt bin ich dabei den QueryPerformanceCounter zu

verwenden,

aber scheitere daran, da ich nicht genau weiß, wo

genau und

wie ich diesen in meinem Code einbauen muss.

Vielleicht hat jemand von ihnen einen BeispielCode

oder noch

weitere Ideen und Anregungen.

Vielen Dank

Hallo!

Leider kann ich Ihnen bei Ihrem Problem nicht mit
fertigem Code sondern nur ein paar Anmerkungen
weiterhelfen:

Da Windows aufgrund des Multitaskings jeder Anwendung
je nach Priorität unterschiedlich oft Prozessorzeit
zuteilt ist eine genaue Taktung leider quasi unmöglich.
Echte Interrupts sind nur auf Treiber-Niveau möglich,
soweit ich weiß. WM_TIMER, das Sie ja bereits
ausprobiert haben, ist nur ein Ereignis, das nach einer
einstellbaren Zeit ausgelöst wird. Das wird es auch
tatsächlich. Leider wird die entsprechende Meldung dann
innerhalb von Windows von Event-Handler zu Event-
Handler weitergereicht, bis es schließlich irgendwann
bei Ihrer Anwendung ankommt und verarbeitet wird. Diese
Laufzeit variiert leider je nach laufenden Anwendungen
und Prozessen.

Wenn Sie genaue Zeitmessungen machen wollen, benötigen
Sie echte Interrupts: Allerdings sind unter Windows die
Treiber und Windows-Systemdienste die einzigen
Komponenten, die direkten Hardwarezugriff ermöglichen.

So leid es mir tut, aber ich vermute Sie werden um das
Schreiben eines Windows-Dienstes oder Treibers wohl
nicht herumkommen.

Ich würde mich allerdings sehr freuen, wenn Sie mich
auf dem Laufenden halten würden, falls ein anderer
Experte eine funktionierende Lösung findet ohne
Treiber.

Viel Erfolg und viele Grüße
Alex

Evt. hilft einer der beiden Artikel weiter:

Der erste Artikel beschreibt wie man den Timer umprogrammiert. Liest sich interessant. Hab es aber nur überflogen.

http://msdn.microsoft.com/en-us/library/ms836797.aspx

Der zweite Artikel beschreibt Realtime-Programming mit Windows CE.

http://msdn.microsoft.com/en-us/library/ms834456.aspx

Hallo strohchen,

sorry für die verspätete Antwort. 1ms ist in den meisten Systemen in der Tat ein Problem, da die kleinste Zeitauflösung i.d.R. bei 10ms liegt. Leider fehlt mir diesbezüglich genaueres Wissen, ob und wie sich 1ms realisieren lassen.

Viele Grüße
Martin