Bonjour à tous et merci d'avance à ceux qui y consacreront un peu de temps.
Je travaille dans les systèmes embarqués depuis peu et je dois écrire un drivers pour recupérer des données d'un FGPA.
Le kernel est un 2.6.21.
Je reçois des interruptions toutes les 2ms pour m'indiquer que les données sont pretes. Pour que le gestionnaire d'IT s'execute le plus rapidement possible j'utilise des tasklets, mais celles-ci mettent 4 ms pour se lancer, sachant que le taux d'occupation de processeur est d'environ 1% .
D'apres les docs que j'ai pu lire, une tasklet devrait mettre de 20 à 200 usec.
Voici une partie de mon code. Pour les tests je n'effectue aucun traitement.
void doTasklet( unsigned long );
DECLARE_TASKLET( tasklet , doTasklet , 0 );
static irqreturn_t itExtFpga( int irq , void *dev_id )
{
static unsigned long myRead;
//------------------------------------------------------------------------
*( unsigned long* ) ( pc_registerPointeur + 0xc08 ) = 0x00300000;
//-------------------------------------------------------------------------
PDEBUG( "IT reçue \n " );
ul_timeStart = jiffies;
tasklet_hi_schedule( &tasklet );
return IRQ_HANDLED;
}
void doTasklet( unsigned long inutile )
{
unsigned long ul_interval = ( jiffies - ul_timeStart ) *1000000/HZ;
PDEBUG( "interval de temps : : %ld. \n" , jiffies );
PDEBUG( "interval de temps : : %ld. \n" , ul_interval );
}
Merci.
Partager