Autres articles / Other articles

eFORTH - Introduction

publication: 1 mars 2023 / mis à jour 1 mars 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 eFORTH. Il fournit des exemples et des explications pour utiliser eFORTH en se concentrant sur les fonctionnalités du langage.

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 eFORTH fonctionnant sur une carte ESP32. Notre intérêt est d'utiliser Forth sur ESP32 dans un système intégré.

Démarrage

eFORTH est un programme qu'il sufiit d'exécuter depuis le répertoire où il a été installé.

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

eFORTH n'est pas sensible à la casse.

L'interpréteur

eFORTH 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. Voici un exemple d'exécution d'un mot eFORTH :

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, eFORTH 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, eFORTH 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 eFORTH. 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 représente la valeur décimale seize.

Si le texte entrant ne peut pas être localisé dans le dictionnaire ni interprété comme un nombre, eFORTH é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 espace 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