www.mikrocontroller.net

Forum: PC-Programmierung Wie kann man die Taktrate Intel-kompatibler Chips ermitteln?


Autor: Alisa 1387 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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)

Autor: Alisa 1387 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Alisa 1387 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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?

Autor: Alisa 1387 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wahrscheinlich wird das Ding über irgendwelche Treiber angesteuert?
hilfe

Autor: Alisa 1387 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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 ;)

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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?

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> 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?

Autor: Andreas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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....

Autor: Alisa 1387 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> 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.

Autor: Tobi H. (tobi-) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
"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?

Autor: Alisa 1387 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>> "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.

Autor: Alisa 1387 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>> 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.