Autres articles / Other articles

ESP32forth - Introduction

publication: 23 février 2023 / mis à jour 23 février 2023

Read this page in english

 

Ce rapport est un remix du matériel d'un certain nombre de tutoriels et de références Forth, adapté à l'environnement ESP32forth. Il fournit des exemples et des explications pour utiliser ESP32forth en se concentrant sur les fonctionnalités du langage plutôt que les détails de ESP32.

Introduction

Forth est un mélange intéressant d'outils d'accès de bas niveau et d'outils de création de langage. Il est en fait une petite boîte à outils avec laquelle vous construisez un dictionnaire spécialisé de mots qui travaillent ensemble pour former votre code d'application. Ce didacticiel explorera et expliquera les fonctionnement de la boîte à outils ESP32forth fonctionnant sur une carte ESP32. Notre intérêt est d'utiliser Forth sur ESP32 dans un système intégré.

Démarrage

Bien que nous utiliserons ESP32forth sur une carte ESP32, nous communiquons avec à l'aide d'un programme de terminal série s'exécutant sur un ordinateur personnel.

Appuyez plusieurs fois sur la touche ENTER ←- pour obtenir l'affichage illustré ici:

Ecran d'accueil en utilisant TeraTerm

ESP32forth n'est pas sensible à la casse.

L'interprèteur

ESP32forth est un langage de programmation interactif composé de mots. Les mots FORTH sont l'équivalent de sous-programmes ou de fonctions dans d'autres langages et sont exécutés en les nommant. Bien que ESP32forth soit interactif à la base, l'utilisateur n'a pas besoin d'interagir avec une application embarquée si son mot de niveau supérieur est défini pour s'exécuter automatiquement à la mise sous tension. Voici un exemple d'exécution d'un mot ESP32forth :

decimal ←- ok<#,ram>

Cela exécute le mot qui définit la base de représentation décimale des nombres, un format avec lequel vous êtes susceptibles d'être plus familier, à moins que vous ne soyez un étudiant en mécatronique ou en informatique. Maintenant, essayons quelque chose d'un peu plus intéressant en entrant :

2 17 + .    \ display: 19 ok 

Cette fois, ESP32forth montre plus clairement sa nature interprétative. Un petit programme appelé l'interpréteur externe boucle continuellement, attendant l'entrée du port série. L'entrée est une séquence de chaînes de texte (mots ou chiffres) séparées les unes des autres par un ou plusieurs caractères ASCII vides.

Les chaînes de texte sont interprétées de trois manières seulement: les mots (sous-programme ou fonction noms), numéros ou non définis. L'interprète externe essaie d'abord de chercher le mot du dictionnaire qui contient les mots déjà définis. S'il trouve le mot, il exécute le code correspondant.

Si aucune entrée de dictionnaire n'existe, l'interpréteur essaie de lire l'entrée comme un nombre. Si la chaîne satisfait aux règles de définition d'un nombre, elle est convertie en nombre dans le représentation interne du microcontrôleur, et stocké dans un emplacement de mémoire spécial, appelé le haut de la pile (TOS).

Dans l'exemple ci-dessus, ESP32forth a interprété 2 et 17 comme des nombres et les a poussés sur la pile. + est un mot prédéfini, tout comme ., ils sont donc recherchés et exécutés. Le mot +(plus) a supprimé 2 et 17 de la pile, les a additionnés et a laissé le résultat 19 sur la pile. Le mot . (point) a supprimé 19 de la pile et l'a envoyé sur le périphérique de sortie standard, le port série pour ESP32forth. Voici une photo de la pile à travers le processus.

word executed 2 17 + .
stack resultTOS21719__
NOS__2____

Nous pourrions également travailler en hexadécimal:

hex  
0a 14 * .    \ display: c8 

Si vous souhaitez indiquer explicitement la base d'un nombre, vous pouvez ajouter un sigil aux chiffres du nombre. Par exemple, $10, #16 et %10000 représentent tous la valeur décimale seize.

Si le texte entrant ne peut pas être localisé dans le dictionnaire ni interprété comme un nombre, ESP32forth émet un message d'erreur.

0A    \ display: ERROR: 0A NOT FOUND! 
thing \ display: ERROR: thing NOT FOUND! 

Notez que le nombre hexadécimal apparent 0A n'a pas été interprété comme tel parce que nous étions en base décimale.

Enfin, voici le programme classique Hello World!.

: hey  
    ." Hello, World!"  
  ; 

Forth vous permet de produire du texte en utilisant le mot ." tandis que les mots : et ; commencent et terminent le définition de votre propre mot hey. Notez que des caractères blancs sont utilisés pour délimiter chacun des ces mots. Maintenant, tapez hey et voyez ce qui se passe.

hey  
\ display: Hello, World! ok 

Dans le langage FORTH, les mots sont séparés par des espaces blancs - espaces, tabulations et retours à la ligne.

Toute chaîne de caractères affichables est un mot: asdf foo jello @W#$ gibbet.

L'interpréteur FORTH est très simple. Il analyse le mot suivant (c'est-à-dire qu'il saute les espaces, puis collecte des caractères jusqu'à ce qu'il voie un autre caractère d'espacement) et l'exécute.

Donc, si vous essayez de comprendre un programme Forth en détail, vous devez regarder chaque mot à tour de rôle et de comprendre ce qu'il fait. Cela semble simple, mais cela vous fera trébucher si vous insistez à vous référer à un algèbre. Allez simplement de gauche à droite, un mot à la fois.


Legal: site web personnel sans commerce / personal site without seling