Pregunta

He heredado un proyecto integrado que requiere un perfil de rendimiento simple por función. Consiste en un Coldfire (MCF5328) que ejecuta uClinux (2.6.17.7-uc1).

No soy un experto ni en Coldfire ni en uClinux (o Linux para el caso), así que disculpe mi ignorancia.

En Windows, simplemente usaría QueryPerformanceCounter para acceder al temporizador de alta resolución x86. Registre el contador antes y después y compare la diferencia.

He aprendido que Linux tiene una serie de variaciones en QueryPerformanceCounter:

  • clock_gettime / res
  • getnstimeofday
  • ktime_x

O incluso acceder al contador de marca de tiempo a través de

  • get_cycles

Ninguno de estos está disponible en la compilación de uClinux que está ejecutando este dispositivo. Por lo tanto, parece que el sistema operativo no tiene acceso por temporizador de alta resolución.

¿Significa esto que el Coldfire en sí no ofrece tal característica? ¿O el autor del puerto de uClinux los dejó fuera? ¿Hay algo en el hardware que pueda usar y cómo lo usaría?

¿Fue útil?

Solución 2

I ended up using one of the four DMA Timers on the Coldfire. It was a simple matter to enable the timer as a free-running, non-interrupt generating, counter. This provides a 12.5ns counter (at 80Mhz).

Otros consejos

Given how old your kernel is, you may not have support for high-resolution timers.

If you are writing a kernel driver, the APIs are different. If get_cycles() is stubbed out, it probably means your CPU architecture doesn't support a cycle counter. Since your kernel is very old, do_gettimeofday is probably the best you can do, short of writing a driver to directly query some timer hardware.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top