Temporizador de alta resolução em Coldfire (MCF5328)
Pergunta
Eu herdei um projeto incorporado que requer alguns perfis de desempenho simples e por função. Ele consiste em um Coldfire (MCF5328) executando o uClinux (2.6.17.7-uc1).
Não sou um especialista em Coldfire ou uClinux (ou Linux), então desculpe minha ignorância.
No Windows, eu simplesmente usaria QueryPerformanceCounter
para acessar o temporizador de alta resolução x86. Registre o contador antes e depois e compare a diferença.
Aprendi que o Linux tem uma série de variações no QueryPerformanceCounter:
- clock_gettime / res
- getnstimeofday
- ktime_x
Ou até mesmo acesso ao contador de carimbo de data / hora via
- get_cycles
Nenhum deles está disponível na compilação do uClinux que este dispositivo está executando. Portanto, parece que o sistema operacional não tem acesso ao temporizador de alta resolução.
Isso significa que o próprio Coldfire não oferece esse recurso? Ou o autor do port uClinux os deixou de fora? Existe algo no hardware que eu posso usar e como faria para usá-lo?
Solução 2
Acabei usando um dos quatro temporizadores de DMA no Coldfire.Foi uma questão simples habilitar o temporizador como um contador de execução livre e não gerador de interrupções.Isso fornece um contador de 12,5 ns (a 80 MHz).
Outras dicas
Considerando a idade do seu kernel, você pode não ter suporte para temporizadores de alta resolução.
Se você está escrevendo um driver de kernel, as APIs são diferentes.Se get_cycles()
for cortado, isso provavelmente significa que a arquitetura de sua CPU não oferece suporte a um contador de ciclo.Como seu kernel é muito antigo, do_gettimeofday
éprovavelmente o melhor que você pode fazer, exceto escrever um driver para consultar diretamente algum hardware de temporizador.