
Premier passage obligé, le "Bonjour Monde" (ou 'hello world')
Avant toute chose, lire la page sur l'utilisation de rforth1 et du moniteur
needs lib/tty-rs232.fs
: main ( -- )
." Bonjour Monde :)" cr
begin again
;On va sauver le fichier sous le nom 'hello.fs', dans c:\rforth1 ou dans ~/work/rforth1.
On compile dans une console:
python rforth1.py hello.fshello.hex, que l'on va pouvoir charger dans le PIC avec le moniteur:python utils/monitor.py --program --port /dev/ttyS0 hello.hexLa première étape a transformé (compilé exactement) le programme décrit dans hello.fs en un code binaire exécutable par le PIC. Ce code exécutable est ensuite chargé dans le PIC par le moniteur: le moniteur communique avec le PIC (et en particulier le bootloader) pour placer le code dans la flash du PIC. Ça change beaucoup des programmateurs classiques :)
On peut alors redémarrer le pic avec un terminal sur le port série, et hop! le programme marche :).
On verra page suivant comment on se sert du terminal et du moniteur en pratique.
needs lib/tty-rs232.fsNotre programme va utiliser un port série - on inclut donc le fichier de définition du port série, qui s'appelle tty-rs232.fs. Ce fichier est dans le répertoire lib, et définit le moyen d'envoyer des caractères sur le port série standard du PIC. On examinera en détail son fonctionnement par la suite.
On pourrait vouloir utiliser le port USB via un chip FTDI245BM, en incluant tty-usb.fs par exemple...
: main ( -- )
[...]
;On définit ici le mot principal du programme (remarquons que l'on ne parle pas de fonctions, mais de mots).
La définition d'un mot commence par : [nom] et se termine toujours par ;.
Tout le code entre le nom et ; constitue le contenu du mot, et sera exécuté lorsque le mot sera appelé.
Par convention, on place juste après le nom du mot l'action du mot sur la pile: ( -- ) signifie ici que le mot ne dépile rien et n'empile rien. On y reviendra par la suite.
tty-inittty-init en écrivant son nom, tout simplement.
." Bonjour Monde :)" crIci on envoie Bonjour Monde :) sur le port série: une chaine envoyée sur le port série commence par le mot ." (attention à l'espace entre le " et le début de la chaine...), et se termine par " (attention, pas d'espace entre la chaine et le ").
Et comme nous sommes polis, on envoie un retour à la ligne:cr .
begin againOn a fini la partie utile, on bloque le contrôleur dans boucle infinie en attendant un reset: la boucle commence par begin et se termine par une répétion infinie: again
On utilise un mot en marquant son nom.
On déclare un mot en commençant par : [mot] et en terminant par un ;. Tous les mots marqués entre le nom du mot déclaré et le ; constitueront le corps de la fonction.
Tout ce qui est placé entre ( parenthèses ) sera ignoré par le compilateur: c'est un commentaire.
On envoie du texte sur le port série en écrivant ce texte entre guillemets précédés d'un point:." texte"