Bonjour
J'ai une question de béotien, je pense avoir la réponse, mais je préfère avoir un avis en plus.
Je travaille sur de petite cible linux embarquées (type µClinux pour Coldfire ou Blackfin), et j'ai un très fort besoin de réactivité du composant.
Donc, je me suis fait un mini scheduler perso, avec tous mes process réglés, qui doivent s'activer sur une base de 25ms (25 pour le plus rapide, puis 100, 250 et 1 seconde).
Là où sa se corse, c'est qu'un usleep de 5000 (donc 5ms) dure en fait 20ms... au moins. Donc, c'est pas cool, car je souhaiterais faire tourner un bout de code dans le kernel toutes les 5ms (la récupération d'entrées CAN), mais la limite de la bestiole est de 20ms. Donc, j'ai prospecté, et il semble que le problème vienne du fait que le switch des process se fait à une fréquence de 250 hz (c'est dans le réglage du kernel). Bon, indépendamment du fait que les temps de switch ne coincident pas, il semblerait qu'en passant cette valeur à 1000hz (possible dans le noyau 2.6), on gagne en fréquence de switch des process.
J'aurais voulu avoir l'avis de personne pour qui un kernel n'est pas juste une bête étrange tapie au fond d'une boite en silicon...
Pour info, j'ai tenté de faire la même chose en utilisant les interruptions software sur le timer du Coldfire. Mêmes effets, l'interruption tombe bien au bout de 5ms, mais le réveil du process se fait au bout de 20ms.
Voilà, merci pour votre aide.
PS : question subsidiaire, y a t-il des logiciels type termite pour émuler un port série sous linux? j'ai essayé minicom, mais question convivialité... de plus, comme je bosse avec un portable, j'ai un émulateur série USB avec la petit module pl2303, et j'ai l'impression que minicom ne marche pas avec.![]()
Partager