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?

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top