Conditions préalables
Un certain nombre d'articles ( https://habr.com/ru/post/345320/ , habr.com/ru/post/80893 , habr.com/ru/post/246975 ) suggèrent qu'Excel peut être utilisé comme traducteur dans le code d'assemblage AVR.
Comparons Excel avec les fonctionnalités de base d'un éditeur de code "normal". La liste des fonctionnalités les plus populaires est la suivante:
Fonctionnalité de l'éditeur de code | Comment mettre en œuvre dans Excel | Tel qu'implémenté dans Atmel Studio |
---|---|---|
Mise en évidence de la syntaxe | Mise en forme conditionnelle des cellules en fonction du contenu | Mise en évidence des commandes |
Autocompletion | Fonctions VBA personnalisées;
Plages nommées; Cellule en tant que mini-console avec une macro pour l'événement Change; |
Non |
Échancrure | Passer manuellement à une colonne adjacente | Manuellement |
Vérification du placement correct des supports | Possède un contrôle intégré | Assemblée seulement |
Aide sur le code contextuel | Non | Il existe une liste de noms d'étiquettes |
Réduire un bloc de code | Fonction de regroupement de colonnes et de lignes | Non |
Analyseur statique | Affiche les erreurs dans les liens lors de vos déplacements | Non |
Ça a l'air acceptable. Certaines choses deviennent «gratuites», quelque chose doit être amélioré.
Mais la principale différence entre un processeur de feuille de calcul et un processeur textuel est que l'utilisateur peut placer un bloc d'informations à un endroit arbitraire dans l'espace, et pas seulement l'un sous l'autre. Nous utilisons cette fonctionnalité pour transformer un code plat en un organigramme presque complet.
Accords initiaux
Prenons l'approche générale et la terminologie d'ici: habr.com/ru/post/345320
L'ensemble de l'algorithme est divisé en branches. La direction joue le rôle d'une unité de programme indépendante.
Chaque succursale a un nom, qui en est le point d'entrée. Il doit être unique et significatif. Tous les noms de branche sont placés sur la ligne supérieure, que nous appellerons - "chaîne de nom".
Une branche se termine par une ou plusieurs branches vers d'autres branches. Les transitions d'une branche à une autre sont placées sur la ligne du bas. Appelons cela la "ligne de saut".
Nous acceptons également la règle selon laquelle à partir d'une succursale, il est impossible d'entrer dans une autre.
Schéma général de l'algorithme
Pour les branches et les boucles dans une branche, des étiquettes sont également utilisées. Autrement dit, il y a beaucoup d'étiquettes dans le programme. Chaque fois que trouver un nouveau nom unique est une routine. C'est là qu'interviennent les fonctionnalités de base d'Excel. Chaque cellule a déjà un nom unique composé d'un nom de colonne et d'un numéro de ligne.
Dans VBA, créons une fonction d' étiquette avec un argument de type Range . Une étiquette dans l'assembleur AVR doit avoir un deux-points à la fin. Ceux. notre fonction d' étiquette reçoit en entrée une référence à la cellule dans laquelle elle est placée et calcule son adresse au format A1. Puis il y ajoute le texte "_M:". Le fragment "_M" n'est pas accidentel, nous l'utiliserons plus loin - dans le formatage des cellules.
Visualisation de la transition
Dans de vrais environnements visuels, les transitions sont indiquées par des flèches. C'est pratique et intuitif.
Dans un processeur de feuille de calcul, au lieu de flèches, vous pouvez teinter les cellules qui forment le chemin vers l'étiquette à partir de la commande de saut. Ceci est fait dans les exemples.
Si vous parvenez à intégrer tout le code de la succursale dans un seul écran, vous n'avez pas à dessiner des itinéraires. Toutes les commandes et étiquettes de transition seront devant vos yeux.
Pour les schémas de principe, il existe des normes pour la désignation des éléments individuels. Par exemple, un rectangle est un calcul; diamant - état, etc. Lorsque vous travaillez avec un processeur de feuille de calcul, nous avons accès au contrôle des couleurs, du style et des bordures.
Excel dispose d'une fonctionnalité de mise en forme conditionnelle pratique. Il peut être utilisé de différentes manières, mais nous n'introduirons que trois règles simples:
- Une cellule non vide dans la barre de nom et dans la barre de transition est de couleur jaune;
- Une cellule non vide dans le corps de la branche est de couleur orange;
- Les cellules avec des étiquettes "locales" et des commandes de saut sont colorées en bleu. C'est une cellule non vide qui contient les caractères "_M" mentionnés ci-dessus.
Le gif ci-dessous montre à quoi ressemble le travail avec les étiquettes et les transitions après tous les paramètres.
Travailler avec des étiquettes et des commandes de saut
La procédure de formation de la liste finale
Le Listing Collector parcourt le programme final de haut en bas et de droite à gauche. Une cellule à la fois.
Comment la liste finale est formée
L'algorithme d'assemblage ignore les cellules vides et les cellules contenant le caractère ";", c'est-à-dire commentaires.
Le débogage de l'algorithme et l'assemblage final du projet ont lieu en studio. Il n'y a pas de retour de code en studio avec les cellules Excel. Par conséquent, pour détecter les erreurs dans le listing final, en face de chaque commande, nous indiquons un lien de cellule. À partir de ce lien, nous trouvons la commande problématique dans le diagramme dans Excel.
La solution algorithmique de base se ramifie comme:
If <> then
<>
Else
<>
End if
Pour cela, il existe des instructions de saut conditionnel dans l'assembleur AVR (breq, brne, sbic et autres). Ces commandes indiquent au programme où aller lorsque la condition est remplie.
Imaginons maintenant à quoi devrait ressembler le programme d'un tel branchement, en tenant compte des principes exposés ci-dessus:
Branchement simple
La commande brne et ses pairs ont une limitation. La distance de saut est de 64 mots dans chaque direction. Par conséquent, une longue macro insérée dans la branche "Aucun" peut appeler hors de portée.
Pour contourner cette limitation, le traitement «Non» doit être effectué dans une branche distincte, qui sera à droite de la marque de branche de brne . Ou utilisez un sous-programme dans lequel la macro est appelée.
Sélectionnez le cas
Si vous devez choisir parmi un grand nombre d'options, le cas de sélection est utilisé en Java:
Select Case <>
Case <1>
Case <2>
Case <3>
Case else
End select
Les sauts d'index sont disponibles en langage d'assemblage pour AVR. Montrons l'option d'implémentation.
Sélectionnez le cas
Ici, vous pouvez voir que l'interdiction de sauter du corps d'une branche à une autre branche est violée. Ceci est intentionnel, sinon le programme prendra trop d'espace horizontal.
Pour la même raison, le vecteur d'interruption doit être exécuté dans une colonne.
Boucle avec post-condition
Une boucle, lorsqu'au moins une répétition est nécessaire, en notation JLU ressemble à ceci:
Do
<>
Loop while <>
Un exemple de son apparence dans Excel et du code résultant dans le studio:
Boucle avec post-condition
Boucle avec précondition
Un exemple en Java:
Do while <>
<>
Loop
Un exemple de son apparence dans Excel et du code résultant dans le studio:
Boucle avec précondition
Boucle avec boucle imbriquée
Le traitement de tableaux ou l'utilisation de nombres implique l'utilisation de boucles imbriquées. Vue générale de JAVU:
Do
Do
<>
Loop while < 2- >
<>
Loop while < 1- >
Il existe deux façons d'implémenter une boucle imbriquée: soit dans une seule branche, soit en utilisant plusieurs branches. Montrons les deux options.
Boucles imbriquées dans une branche
Boucles imbriquées avec implémentation via des branches
Boucle avec sortie conditionnelle
Il y a des situations où vous devez quitter le cycle avant qu'il ne se termine. Par exemple, un zéro logique sur la 0ème branche du port D peut indiquer une sorte de dysfonctionnement. Le programme doit quitter la boucle principale et déclencher une alarme.
Dans JLU, la commande break est utilisée et l'algorithme général est le suivant:
Do
<>
If < > then break
Loop while <>
Montrons à nouveau à quoi ressemblerait l'algorithme sans branches et avec branches.
Interrompre une boucle dans une branche
Interrompre une boucle implémentée via des branches
Appel de sous-programmes
Les sous-programmes sont appelés par les commandes call , icall , rcall . Il y a une caractéristique importante ici. Le sous-programme doit être appelé strictement à partir du corps de la branche. Si l'appel est placé sur une ligne secondaire, il est presque garanti que le retour du sous-programme se produira au mauvais endroit.
Exigences obligatoires pour le sous-programme:
- le sous-programme lui-même doit commencer par un nom d'étiquette;
- la dernière commande du sous-programme doit être retouée et placée dans la ligne de saut.
La structure interne du sous - programme peut être tout - appliquer toute la même étiquette automatique étiquette pour implémenter la logique.
Exemple de feu de course
Voici le code d'un programme de test de feux de marche. L'exemple comprend des boucles, des branches et des appels de sous-programmes.
Le résultat final ressemble à ceci:
Schéma d'éclairage courant
Liste de l'ensemble du programme dans Excel avec un ajustement scratch sur un écran:
Lumière courante. Code Excel
Lumière courante. Inscription finale
Résultat
Ce qui n'a pas aimé
- Il est peu probable que la méthode décrite convienne pour travailler sur un grand projet avec la participation de toute une équipe. Contrôle de version, diffs, etc. vous devez encore décider du côté.
- En mode débogage, c'est très gênant sans deux moniteurs. Le débogage lui-même est effectué dans le studio et l'organigramme dans Excel. Ce sont des fenêtres différentes, une commutation est nécessaire.
- Le programme gonfle rapidement horizontalement. Dans le même temps, dans Excel, le défilement vers le côté est difficile et peu pratique.
- - – . 12801024 5 45 . 20% ( 45 ). – . .
- « » . .
- Excel . Atmel Studio .
- .
- . – . , .
- Excel . - , - – VBA.
- . « » , . 4-5 . « – – – » , « » , « » « ». 4-5 .
- Vérifications supplémentaires des erreurs. Il est facile d'utiliser une macro pour vérifier s'il y a des blocs «pendants» qui ne se terminent pas par des transitions. Nous pouvons également utiliser une macro pour rechercher et supprimer les étiquettes inutilisées qui distraient l'attention lors du débogage.
- Vous pouvez entrer vos propres règles pour colorer les cellules.
- Si un processeur de tableur était intégré au studio en tant qu'éditeur de code, il serait alors très pratique de déboguer directement sur un tel diagramme.