Таймер высокого разрешения на Coldfire (MCF5328)
Вопрос
Я унаследовал встроенный проект, который требует простого профилирования производительности для каждой функции. Он состоит из 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.