LA PROGRAMMATION PARALLELE de TACHES DIFFERENTES c'est FACILE avec le PROPELLER !
Un robot est ammené a exécuter en même temps plusiers taches : controler des moteurs, repérer des obstacles, recevoir des messages par vradio ou internet...
Les anciens microprocesseurs nécessitaient d'arréter en urgence la tache en cours pour ren exécuter une autre. Il fallait gérer des "interruptions" : pas simple et délicat lorsque les taches se multiplient.
Le Propeller a été conçu pour gérer facilement jusqu'a 8 taches en paralléle , sans utiliser d'interruptions!
Comment ça marche ?
Et bien c'est fondé sur deux choses:
- en fait le Propeller a 8 cerveaux (appelés "cogs" et numérotés de 0 a 7) , chacun de ces cerveaux exécute un programme dans une zone mémoire qui lui est réservée, indépendamment des 7 autres cerveaux.
- tous ces programmes stockent les variables déclarées dans les zones "VAR" de chaque programme sur une sorte de tableau noir commun , ou elles sont visibles et utilisables par tous les autres programmes. Ainsi , si un détecteur modifie la variable qui détermine la vitesse de rotation de la roue droite du robot , le programme moteurs éxécuté dans un autre cog utilisera aussitot cette variable modifiée.
Pour une utilisation courante , une fois qu'on a compris ces deux principes on peut faire beaucoup de choses : le robot a des réactions rapides et fluides et tout se passe bien.
Si on va plus loin il y a quelques petites choses a savoir pour éviter des difficultés.Mais celà apparait essentiellement dans le cas ou on utilise des programmes trés rapides écrits en assembleur et a ce stade c'est du travail semi professionnel qu'on peut d'ailleurs éviter en utilisant des "objets" de la base d'échanges gratuits. On trouve des exemples de fonctions de ce genre lorsqu'on veut programmer une synthése sonore sur 4 voies paralléles (voyez l'objet "stereo spatializer" de la banque d'échange ) ou si on veut connaitre a chaque instant, avec une précision de quelques degrés, le mombre de tours d'un arbre moteur fonctionnant a 5000 tours minute (voir l'objet "quadrature encoder" pour odométrie ).
Néanmois les choses suivantes sont utiles a savoir (mais pas indispensables si vous n'écrivez pas vous même de fonctions travaillant a trés grande vitesse) :
- modifier des variables numériques est quasiment immédiat et ne pose pas probléme , par contre si vous modifiez un tableau de variables (ou une chaine de caractéres ce qui revient au même) il faut un peu de temps pour parcourir le tableau et vous ne souhaitez pas qu'il soit vu a moitié modifié, une méthode de verrou (lock puis unlock) permet de ne rendre cette modification visible qu'une fois qu'elle est compléte
- même en assembleur, il faut au moins 7 ticks de l'horloge du microcontrolleur pour que chacun des 8 cerveaux se soient connectés une fois au tableau de mémoire centrale (situé dans l'espace du propeller appelé HUB), donc pour qu'ils aient pris en compte une modification (c'est un minimum ) . Quand le microcontrolleur fonctionne a 80 Megahertz cela fait a peu prés 80_000_000 / 8 soit un dix millioniéne de seconde : soit 100 nanosecondes. Pour des détails plus précis consultez sur le site de Parallax les notes écrites par deSilva ( d'un institut de technologie allemand). Et en SPIN , comme c'est un langage interprété on va environ 40 fois moins vite.
Un exemple classique de programme paralléle en SPIN : on utilise deux détecteurs d'obstacles infra rouges pour corriger la trajectoire d'un robot