Ich möchte das Time Stamp Register nutzen, um (per Offset) zu messen, ob ein bestimmter Zeitraum überschritten wurde. Dazu muß ich allerdings erst einmal herausfinden, wie oft das Register pro Sekunde weitergezählt wird (also die Taktrate des Prozessors, auf dem das Programm gestartet wird). Wie kann ich effektiv ermitteln, wie viele Cycles die CPU pro sekunde reißt? Was benutzt die timer.h, um das Time Stamp Register in Bezug zur wirklichen Zeit zu setzen? (Ich bin C-Anfänger und möchte für meinen Anwendungsfall lieber einen Inline-Assembler Code erzeugen, anstatt die timer.h einzubinden. Im schlimmsten Fall müsste ich die timer.h trotzdem einbinden und die abgelaufenen cycles einer Sekunde ermitteln, doch elegant wäre das sicher nicht)
Ein programmierbarer Hardware-Timer würde übrigens auch helfen, doch im "Intel Architecture Software Developer´s Manual Vol. 2" (über das instruction set) konnte ich keinen solchen finden.
Wenn Du mit "intel-kompatibel" einen x86-Prozessor meinst, dann gibt es immer noch den Standardtimer 8254 von Intel, der in eigentlich jedem PC-kompatiblen Hardwaredesign seit den frühen 80er Jahren vorhanden ist ... Im Befehlssatz des Prozessors hat die Beschreibung dieses Bausteines nichts verloren, deshalb wirst Du sie darin auch nicht finden. Ein Prozessor im klassischen Sinne enthält keinerlei Peripherie und unterscheidet sich gerade darin vom Controller.
Ach so, also möchte ich einen externen Baustein ansprechen. Ist der Timer 1.) aus dem Adressraum der CPU ansprechbar oder hängt er an einem externen Bus? 2.) zwecks Kompatibilität immer an der gleichen Adresse angeschlossen?
Wahrscheinlich wird das Ding über irgendwelche Treiber angesteuert? hilfe
Wenn ich ne externe Wordclock über einen Treiber einbinde, dann kann ich per Time Stamp die "in realtime" verfügbaren cycles zwischen zwei Samples ermitteln. Wenn schon Treiber, dann wenigstens mit ner vernünftigen Clock ;)
Der 8254 ist in PCs üblicherweise im I/O-Adressraum bei den Adressen 0x40..43 oder 0x50..53 zu finden. Der I/O-Adressraum ist bei x86-Prozessoren vom normalen Arbeitsspeicher-Adressraum getrennt und auch nur 64 kByte groß. Unter was für einer Betriebssystemumgebung und auf exakt was für einer Hardware versuchst Du Deine Erkenntnisse zu gewinnen?
> Ich möchte das Time Stamp Register nutzen, um (per Offset) zu > messen, ob ein bestimmter Zeitraum überschritten wurde. Das ist aber recht unzuverlässig. Bei Multiprozessorsystemen läuft ein Prozess mal auf dem einen, mal auf dem anderen Prozessor. Und bei vielen Notebooks (und teils auch bei Desktops) gibt's eine dynamische Änderung der Taktfrequenz. Deshalb hat jeder PC auch einen Timer mit eigenem festem Takt. Dadurch braucht man sich um sowas nicht zu kümmern. > Wie kann ich effektiv ermitteln, wie viele Cycles die CPU pro > sekunde reißt? Man nutzt die entsprechende Betriebssystemfunktionalität. > Was benutzt die timer.h, um das Time Stamp Register in Bezug zur > wirklichen Zeit zu setzen? Was ist "die timer.h"? > (Ich bin C-Anfänger und möchte für meinen Anwendungsfall lieber > einen Inline-Assembler Code erzeugen, anstatt die timer.h > einzubinden. Warum? > Wahrscheinlich wird das Ding über irgendwelche Treiber > angesteuert? Kommt drauf an. Jedes ernstzunehmende Betriebssystem lässt ein normales Programm nicht direkt auf die Hardware zugreifen. Normalerweise bieten die Systeme auch umfangreiche Funktionen für's Timing an. Was spricht dagegen, die zu nutzen?
Jede ernst zu nehmende Hardware hat einen HPET. Infos zu den diversen Timer- und Timerkrücken hier: http://www.microsoft.com/whdc/system/CEC/mm-timer.mspx?pf=true#img3
> Was ist "die timer.h"? ein include-file > Kommt drauf an. Jedes ernstzunehmende Betriebssystem lässt ein > normales Programm nicht direkt auf die Hardware zugreifen. > Normalerweise bieten die Systeme auch umfangreiche Funktionen für's > Timing an. Was spricht dagegen, die zu nutzen? Ich möchte PCs für realtime mißbrauchen. DOS ist also raus und außerdem mag ich keine Betriebssysteme, welche nicht gleichzeitig das Anwendungs-Programm sind. Also möchte ich nur das nötigste mit Linux booten, sofern es möglich ist, eine Applikation zu schreiben, welches eine vorhersehbare DSP Performance liefert und dem nicht vom "Betriebssystem" die Prozess-Priorität genommen wird.
"ein include-file" Ach wirklich? "Ich möchte PCs für realtime mißbrauchen." Das wird unter keinem normalen OS absolut berechenbar sein, du wirst nirgendwo die CPU für dich alleine haben. "DOS ist also raus" Und warum?
>> "Ich möchte PCs für realtime mißbrauchen." >> Das wird unter keinem normalen OS absolut berechenbar sein, du >> >> wirst nirgendwo die CPU für dich alleine haben. Es gibt jedoch diverse Hardware Geräte mit Realtime-Stempel, welche ein modifiziertes (abgespecktes) Linux nutzen. Findest Du die alle kacke oder warst Du dir dessen nicht bewusst? >> "DOS ist also raus" >> Und warum? Gibt´s dazu ein (verständliches) Source-File und ne Doku der einzelnen Programmteile? Unmodifiziert wird das jedenfalls nix, MS DOS ist ziemlich genau das Gegenteil von Realtime.
>> Bei Multiprozessorsystemen läuft ein Prozess mal auf dem einen, >> mal auf dem anderen Prozessor. Das Time Stamp Register erfährt beim Systemstart eine Reset. Funktioniert das Hardware-Inkrement des Time Stamp durch das Quarz nicht, wenn ein Prozessor etwas berechnet und laufen die zwei Time Stamps dann auseinander, oder was genau ist deine Aussage? > Und bei vielen Notebooks (und teils auch bei Desktops) gibt's eine > dynamische Änderung der Taktfrequenz. Ich möchte ja nicht, daß es auf einer beliebigen Hardware läuft oder auch nicht richtig, bin ja nicht MS oder Apple.
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.