Domanda

Ho ereditato un progetto incorporato che richiede alcuni semplici profili delle prestazioni per funzione. Consiste in un Coldfire (MCF5328) che esegue uClinux (2.6.17.7-uc1).

Non sono un esperto né di Coldfire né di uClinux (o Linux se è per questo), quindi scusa la mia ignoranza.

In Windows userei semplicemente QueryPerformanceCounter per accedere al timer x86 ad alta risoluzione. Registra il contatore prima e dopo e confronta la differenza.

Ho imparato che Linux ha una serie di variazioni su QueryPerformanceCounter:

  • clock_gettime / res
  • getnstimeofday
  • ktime_x

O anche l'accesso al contatore timestamp tramite

  • get_cycles

Nessuno di questi è disponibile nella build di uClinux in esecuzione su questo dispositivo. Quindi sembra che il sistema operativo non abbia accesso al timer ad alta risoluzione.

Questo significa che la stessa Coldfire non fornisce tale funzionalità? O l'autore del port di uClinux li ha tralasciati? C'è qualcosa sull'hardware che posso usare e come potrei usarlo?

È stato utile?

Soluzione 2

Ho finito per utilizzare uno dei quattro timer DMA sul Coldfire.Era semplice abilitare il timer come contatore a funzionamento libero e senza interruzioni.Ciò fornisce un contatore a 12,5 ns (a 80 Mhz).

Altri suggerimenti

Data l'età del tuo kernel, potresti non avere il supporto per i timer ad alta risoluzione.

Se stai scrivendo un driver del kernel, le API sono diverse.Se get_cycles() è bloccato, probabilmente significa che l'architettura della tua CPU non supporta un contatore di cicli.Poiché il tuo kernel è molto vecchio, do_gettimeofday èprobabilmente il meglio che puoi fare, a meno di scrivere un driver per interrogare direttamente l'hardware del timer.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top