Re: Problème de lecture d'un LSM9DS1 en I2C
Posté : lun. 13 mars 2017 22:14
Un point ne me parait pas très clair: Les 6 threads, c'est pour lire le LSM ou pour lire le tableau dynamique et copier vers la carte SD ?Pinhapple a écrit :Je viens de voir ton commentaire, c'est une bonne idée de "vider" le tableau dans ton fichier avec un thread !Bud Spencer a écrit :J'avais d'ailleurs précisé dans les commentaires la nécessité de buffériser pour s'affranchir des temps d'écriture à chaque boucle
Et du coup ça m'amène à une question : je ne peux pas utiliser 6 threads, chacun occupé à lire une valeur (accélération X, Y, Z, et rotation X, Y, Z) ?
EDIT : en modifiant le baudrate dans /boot/config.txt (ajout d'une ligne dtparam=i2c_baudrate=1200000), je passe à environ 1100 récupérations de 6 valeurs brutes par seconde, le tout avec mon programme en C et un MPU-6050. Du coup je vais retester avec le LSM9DS1 du Sense HAT pour voir ce que ça donne !
Étant un "vieux" formé au dernier millénaire, je ne maîtrise pas les threads mais leur ancêtre, le fork (je connais les différences). Ma répondre est donc à prendre avec circonspection, en attendant l'avis plus pertinent de Bud (ou d'un autre contributeur).
Dans les 2 cas, je pense que la multiplication des threads n'est pas de nature à optimiser. En effet, dans les 2 cas, nous avons :
1 seul "objet" en entré (le LSM ou le tableau dynamique (en RAM).
1 seul objet en sortie (le tableau dynamique ou le fichier sur la carte SD.
Il va donc falloir gérer les accès concurrents ce qui va introduire de la latence (gestion des verrous...).
Exemples:
-) accès au LSM via I2C:
Une lecture commence par une condition de départ, puis se termine par une condition de fin ( http://www.robot-electronics.co.uk/i2c-tutorial )
La thread va lire ses 2 octets et libérer le bus.
L'autre thread doit refaire une start condition, relire ses 2 octets, refaire une condition de fin.
Autant faire une thread d'acquisition qui fera sa condition de départ puis lira le N échantillons puis libérera le bus.
-) accès au tableau dynamique puis enregistrement sur carte SD:
Même s'il y a un fichier par grandeur mesurée, il il aura concurrence pour accéder au périphérique et au système de fichier.
BTW) Il faudra horodater les échantillons pour un traitement ultérieur.
Je pense qu'une thread de lecture du LSM, surtout en gérant par interruption, et une thread de vidage du tableau dynamique devrait permettre d'optimiser le processus.
Sylvain