Вопрос

Я унаследовал встроенный проект, который требует простого профилирования производительности для каждой функции. Он состоит из Coldfire (MCF5328) под управлением uClinux (2.6.17.7-uc1).

Я не эксперт ни по Coldfire, ни по uClinux (или по Linux в этом отношении), так что извините за мое незнание.

В Windows я бы просто использовал QueryPerformanceCounter для доступа к таймеру высокого разрешения x86. Запишите счетчик до и после и сравните разницу.

Я узнал, что в Linux есть несколько вариантов QueryPerformanceCounter:

  • clock_gettime / res
  • getnstimeofday
  • ktime_x

Или даже доступ к счетчику отметок времени через

  • get_cycles

Ничего из этого нет в сборке uClinux, на которой работает это устройство. Получается, что ОС не имеет доступа к таймеру с высоким разрешением.

Означает ли это, что в самом Coldfire нет такой функции? Или автор порта uClinux их не упомянул? Есть ли на оборудовании что-то, что я могу использовать, и как это сделать?

Это было полезно?

Решение 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).

Другие советы

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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top