Hochauflösender Timer bei Coldfire (MCF5328)
Frage
Ich habe ein eingebettetes Projekt geerbt, für das ein einfaches Leistungsprofil pro Funktion erforderlich ist. Es besteht aus einem Coldfire (MCF5328), auf dem uClinux (2.6.17.7-uc1) ausgeführt wird.
Ich bin weder ein Experte für Coldfire noch für uClinux (oder Linux). Entschuldigen Sie meine Unwissenheit.
Unter Windows würde ich einfach QueryPerformanceCounter
verwenden, um auf den hochauflösenden x86-Timer zuzugreifen. Notieren Sie den Zähler vorher und nachher und vergleichen Sie die Differenz.
Ich habe erfahren, dass Linux eine Reihe von Variationen von QueryPerformanceCounter hat:
- clock_gettime / res
- getnstimeofday
- ktime_x
Oder greifen Sie sogar über auf den Zeitstempelzähler zu
- get_cycles
Keine dieser Optionen ist in dem von diesem Gerät ausgeführten uClinux-Build verfügbar. Es scheint also, dass das Betriebssystem keinen hochauflösenden Timerzugriff hat.
Bedeutet dies, dass das Coldfire selbst keine solche Funktion bietet? Oder hat der Autor des uClinux-Ports sie ausgelassen? Gibt es etwas auf der Hardware, das ich verwenden kann, und wie würde ich damit umgehen?
- get_cycles
Lösung 2
Am Ende habe ich einen der vier DMA-Timer für das Coldfire verwendet.Es war einfach, den Timer als frei laufenden, nicht unterbrechungserzeugenden Zähler zu aktivieren.Dies liefert einen 12,5-ns-Zähler (bei 80 MHz).
Andere Tipps
Angesichts des Alters Ihres Kernels werden hochauflösende Timer möglicherweise nicht unterstützt.
Wenn Sie einen Kerneltreiber schreiben, unterscheiden sich die APIs.Wenn get_cycles()
gelöscht wird, bedeutet dies wahrscheinlich, dass Ihre CPU-Architektur keinen Zykluszähler unterstützt.Da Ihr Kernel sehr alt ist, ist do_gettimeofday
Wahrscheinlich das Beste, was Sie tun können, ohne einen Treiber zu schreiben, um Timer-Hardware direkt abzufragen.