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?

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top