Gestion des fichiers sources par blocs
publication: 18 juillet 2021 / mis à jour 3 avril 2022
Appel à collaboration
Vous développez des montages, simples ou complexes avec ESP32 et ESP32forth.
Partagez-les ici sur ce site.
ESP32forth ne pourra se développer qu'avec la collaboration active de toutes les bonnes volontés.
Vos montages peuvent aider d'autres développeurs.
Les montages des autres développeurs peuvent vous aider.
Pour proposer un article ou un montage, cliquez ici
Les blocs
Ici un bloc sur un ancien ordinateur:
Un bloc est un espace de stockage dont l'unité a comme dimensions 16 lignes de 64 caractères. La taille d'un bloc est donc de 16x64=1024 octets. C'est très exactement la taille d'un Kilo-octet!
Ouvrir un fichier de blocs
Un fichier est déjà ouvert par défaut au démarrage de ESP32forth.
C'est le fichier blocks.fb
En cas de doute, exécutez default-use
.
Pour savoir ce qu'il y a dans ce fichier, utilisez les commandes de l'aditeur en
tapant d'abord editor
.
Voici nos premières commandes à connaître pour gérer le contenu des blocs:
l
liste le contenu du bloc courantn
sélectionne le bloc suivantp
sélectionne le bloc précédent
ATTENTION: un bloc a toujours un numéro compris entre 0 et n. Si vous vous retrouvez avec un numéro de bloc négatif, celà génère une erreur.
Editer le contenu d'un bloc
Maintenant que nous savons sélectionner un bloc en particulier, voyons comment y insérer du code source en langage FORTH...
Une stratégie consiste à créer un fichier source sur votre ordinateur à l'aide d'un éditeur de texte. Il suffira ensuite d'effectuer un copié/collé par ligne de votre code source vers les fichiers de blocs.
Voici les commandes essentielles pour gérer le contenu d'un bloc:
wipe
vide le contenu du bloc courantd
efface la ligne n. Le numéro de ligne doit être dans l'intervalle 0..14. Les lignes qui suivent remontent vers le haut. Exemple:3 D
efface le contenu de la ligne 3 et fait remonter le contenu des lignes 4 à 15.e
efface le contenju de la ligne n. Le numéro de ligne doit être dans l'intervalle 0..15. Les autres lignes ne remontent pas.a
insère une ligne n. Le numéro de ligne doit être dans l'intervalle 0..14. Les lignes situées après la ligne insérées redescendent. Exemple:3 A test
insère test à la ligne 3 et fait descendre le contenu des lignes 4 à 15.r
remplace le contenu de la ligne n. Exemple:3 R test
remplace le contenu de la ligne 3 par test
Voici notre bloc 0 en cours d'édition:
En bas d'écran, la ligne 10 R 6428 , 6561 , .....
est en cours d'intégration dans
notre bloc à la ligne 10.
Vous remarquez que la ligne 0 n'a pas de contenu. Ceci génère une erreur à la compilation
du code FORTH. Pour y remédier, on tape simplement 0 R
suivi de deux espaces.
Avec un peu d'entrainement, en quelques minutes, vous aurez inséré votre code FORTH dans ce bloc.
Procédez de même pour les blocs suivants si nécessaires.
Au moment de passer au bloc suivant, vous forcez la sauvegarde du contenu des blocs en
tapant flush
.
Compilation du contenu des blocs
Avant de compiler le contenu d'un fichier de blocs, nous allons vérifier que leur contenu est bien sauvegardé. Pour celà:
- tapez
flush
, puis débranchez la carte ESP32; - attendez quelques secondes et rebranchez la carte ESP32;
- tapez
editor
etl
. Vous devez retrouver votre bloc 0 avec le contenu que vous avez édité.
Pour compiler le contenu de vos blocs, vous disposez de deux mots:
load
précédé du numéro du bloc dont on veut exécuter et/ou compiler le contenu. Pour compiler le contenu de notre bloc 0, on exécutera0 load
;thru
précédé de deux numéros de blocs va exécuter et/ou compiler le contenu des blocs comme si on exécute une succession de motsload
. Exemple:0 2 thru
exécute et/ou compile le contenu des blocs 0 à 2.
La vitesse d'exécution et/ou de compilation du contenu des blocs est quasi instantanée.
Exemple pratique pas à pas
Nous allons voir, avec un exemple pratique, comment insérer un code source dans le bloc 1. Voici le code provenant de notre article intitulé Définition et manipulation de registres remis en forme et prêt à intégrer dans notre bloc:
1 list editor 0 r \ tools for REGISTERS definitions and manipulations 1 r : mclr { mask addr -- } addr @ mask invert and addr ! ; 2 r : mset { mask addr -- } addr @ mask or addr ! ; 3 r : mtst { mask addr -- x } addr @ mask and ; 4 r : defREG: \ define a register, similar as constant 5 r create ( addr1 -- <name> ) , 6 r does> ( -- regAddr ) @ ; 7 r : .reg ( reg -- ) \ display reg content 8 r base @ >r binary @ <# 9 r 4 for aft 8 for aft # then next 10 r bl hold then next #> 11 r cr space ." 33222222 22221111 11111100 00000000" 12 r cr space ." 10987654 32109876 54321098 76543210" 13 r cr type r> base ! ; 14 r : defMASK: create ( mask0 position -- ) lshift , 15 r does> ( -- mask1 ) @ ; save-buffers
Procédez simplement par des copié/collé partiels du code ci-dessus et exécutez ce code par ESP32 Forth:
1 list
pour sélectionner et voir ce que contient le bloc 1editor
pour sélectionner le vocabulaireeditor
- copiez les lignes
n r....
par paquets de trois et faites-les exécuter save-buffers
sauvegarde en dur le code dans le fichier de bloc
Eteignez la carte ESP32. Redamarrez-là. Si vous tapez 1 list
vous
devez voir le code édité et sauvegardé.
Pour compiler ce code, tapez simplement 1 load
.
Conclusion
L'espace de fichiers disponible pour ESP32forth est proche de 1,8Mo. Vous pouvez donc gérer sans souci des centaines de blocs pour les fichiers sources en langage FORTH. Il est conseillé d'installer des codes sources de parties de codes stables. Ainsi, lors de la phase de mise au point de programmes, il sera bien plus aisé d'intégrer à votre code en phase de mise au point:
2 5 thru \ integrate pwm commands for motors
au lieu de recharger systématiquement ce code par ligne série ou WiFi.
L'autre intérêt des blocs est de permettre l'embarquement in situ de paramètres, tables de données, etc... utilisables ensuite par vos programmes.
Legal: site web personnel sans commerce / personal site without seling