Mode d'emploi du simulateur Stm8s
Ph.Leroy
15/12/2020
Simulateur stm8s
Le simulateur stm8s est une application web qui permet de réaliser et de tester des petites applications fonctionnant sur un microcontrôleur.
Cette application a été crée de toute pièces pendant la pandémie du Covid19 qui empêchait les étudiants de réaliser leurs TPs en laboratoire; elle reprend les contraintes des TPs physiques qui fonctionnent avec un matériel provenant de chez STMicroelectronics.
L'architecture simulée est donc celle du stm8s de chez STMicroelectronics.
Les délais de réalisation ont contraints le développeur à se "contenter" du langage d'assembleur tel que définis par STMicroelectronics.
Il aurait été préférable de disposer d'un compilateur C comme pour les TPs en laboratoire, mais cela était au-delà des moyens de développement disponibles.
Néanmoins l'utilisation du langage d'assemblage est un réel plus lors de premiers apprentissages, le rajout de visualisation détaillée sur écran permet d’accélérer cet apprentissage.
Enfin l'utilisation du langage d'assemblage n'interdit pas d'utiliser de bonnes règles de conception et de codage comme la modularité; on peut même dire que les faiblesses congénitales du langage d'assemblage imposent de bonnes pratiques dés le départ.
Fonctionnement général
La simulation d'une application Stm8 se fait sur une page web du site d'hébergement (simu_vue.php) auquel on transmet un fichier contenant le programme d'assemblage.
Ce programme d'assemblage est parfaitement standard et doit être complété d'une primitive indiquant quelle visualisation on veut utiliser (primitive: synoptic EQU "xxxxxx")
Le simulateur fournit différents synoptiques adaptés à différentes interfaces externes:
- synoptique coeur-mémoire
- synoptique GPIO ( Leds et swithes)
- synoptique Afficheur 7 segments
- synoptique Timer et afficheur 7 segments
Édition d'un programme
Un programme est un fichier résidant dans l'espace de stockage de l'utilisateur, chaque étudiant doit donc avoir un compte nominatif lui permettant de créer, de modifier et d'exécuter des fichiers contenant des programmes d'assemblage.
Lorsque l'utilisateur veut créer une nouvelle application, il se rend dans son espace personnel et fait "Fichiers / Nouveau", il donne alors un nom et sélectionne le type de fichier "simulation".
Un fichier est créé contenant un modéle de programme d'assemblage.
L'utilisateur peut éditer son application à partir de son espace personnel (simu_edit.php), modifier son source et l'assembler afin de détecter d'éventuelles erreurs.
Exécution d'un programme
A partir de son espace personnel, un utilisateur peut lancer son programme en double-cliquant sur son icone, l'écran de visualisation s'ouvre alors (simu_vue.php).
Cet écran comprend deux parties principales:
- En haut le synoptique est visualisé avec les données de la simulation
- En bas on affiche le listing de l'assemblage du programme qui permet de vérifier l'exactitude de la génération et de retrouver les adresses d'implantation des différents codes.
La visualisation
La visualisation propose en partie supérieure des boutons de contrôle.
Boutons | Fonction |
---|---|
Next | Lance l'exécution de l'instruction courante en restant au même niveau (les sous-programmes sont exécutés d'un seul coup). |
Step In | Lance l'exécution de l'instruction courante et s'arrête sur la suivant y compris dans un sous-programme. |
Continue | Lance l'exécution continue du simulateur, la visualisation est mise à jour à chaque pas. |
L'appui successif sur continue "accélère" de plus en plus la simulation jusqu'à la suspendre | |
Stop | Arrête l’exécution continue du simulateur |
Mem: << < > >> | Permet de décaler la zone de visualisation de la mémoire de type Vue plus ou moins rapidement dans les deux sens. |
La partie graphique proprement dit comprend généralement une représentation du cœur du microcontrôleur avec ses registres ( Accumulateur, Index X et Y, Compteur ordinateur, Pointeur de pile et registre de condition). Lorsque la zone mémoire pointée par un registre est visible, l'adresse pointée est matérialisée par une étiquette colorée dans la mémoire visualisée.
La première ligne montre en général le compteur de cycles total de la simulation, l'instruction source qui vient d'être exécutée et l'instruction source qui va être exécutée.
Les autres parties représentent différentes vues de l'espace mémoire du microcontrôleur ( Première page, pile, ...).
Étant donné que l'essentiel de la charge de simulation est lié aux transferts de données de visualisation du serveur au client, il est conseillé d'intégrer dans le synoptique que le minimum de l'espace mémoire nécessaire à l'exercice à réaliser.
Par exemple pour un exercice sur les entrées-sorties on se contente d'afficher la plage liée au GPIO (0x5000-0x500F), pour un exercice sur les timers l'affichage des registres du Timer2 par exemple est rajouté au synoptique.
Simulation des dispositifs et éléments externes
Le simulateur permet de montrer les registres des dispositifs mais aussi les pins associées à ces dispositifs (PA0, PA1, ...). Ces pins sont caractérisées par un graphisme particuliers et leurs polarisations est montrée par la couleur de leurs fonds ( Bleu clair 0V et rouge +5V).
En cliquant sur une pin on peut faire changer son état mais dés que la simulation reprend si ces pattes sont valorisés par le dispositif elle perdent cette modification.
Les boutons switchs sont des équipements externes dont l'état (ouvert ou fermé) peut être changer en cliquant dessus, si ces switchs sont reliés à une tension d'un coté et à une patte du microcontrôleur de l'autre, la patte est mise à jour en conséquence.
Attention lorsque la simulation est en mode continu rapide, la prise en compte d'un clique sur un équipement externe peut être délicate.
Interruptions
Le simulateur permet de simuler des interruptions standards, dans ce cas le fichier source doit comprendre la tables des vecteurs d'interruption.
Point d'arrêt
Le simulateur permet de poser et de retirer un point d’arrêt, il suffit pour cela de cliquer sur le texte définissant une adresse ( par exemple 80AC) dans le synoptique. Le point d'arrêt est alors visualiser par un rond rouge dans la représentation éventuelle de la mémoire. Par contre si vous activez le point d’arrêt sur une adresse qui n'est pas celle d'un code d'instruction, l'arrêt ne se produira jamais.
Il est encore plus de double-cliquer sur l'adresse d'une instruction dans le listing d'assemblage.
Un point d'arrêt peut être placé dans une routine d'interruption.
Toutes les propositions d'amélioration seront les bienvenues.