au fil des deux derniers articles, j’ai expliqué comment il est magnifique mais étrange, puis vous êtes mis en place sur un système de base et clignotez des DEL. Et pendant que je vous ai signalé au multitine, nous ne l’avons pas encore apporté beaucoup de temps réel. Mise en route sur un système Forth comme celui-ci correspond à environ la moitié de la bataille. Travailler à l’intérieur du microcontrôleur est différent de la compilation du microcontrôleur et de déterminer le flux de travail, de la technique des problèmes, et des ressources bénéfiques ne sont pas nécessairement évidentes. De plus, il existe des caractéristiques formidables de MECRISP-Stellaris pour que vous ne puissiez pas remarquer que vous n’avez peut-être pas piraté sur le système pendant un moment.
Idéalement, vous alliez jeter un coup d’œil sur le port de quelqu’un qui fait leur truc et que vous verriez une partie de la façon dont ils travaillent. C’est l’objectif de cette pièce. Si vous avez déjà flashé dans notre version de MECRISP-Stellaris-Plus-Embello, vous êtes prêt à suivre. Sinon, revenez et faites vos devoirs réels rapidement. Nous serons toujours là quand vous avez terminé. Beaucoup de ce message seront très sûrs de la saveur de Mecrisp-Stellaris de Forth, mais étant donné qu’il court sur des tonnes de chips de bras, ce n’est pas un mauvais endroit pour être.
Se faire acclimater
La première chose que vous allez avoir besoin de vous habituer à la pile. Vous savez que la vieille châtaigne sur les gens ne pouvant conserver que cinq (sept?) Choses dans leur esprit à la fois? Fortez cela à l’épreuve.
La dernière fois, j’ai brièvement souligné la commande .s (“impression pile”). Dans l’édition Hackaday, j’ai redéfini la MECRISP conventionnelle. C’est un peu moins verbeux, et à mes yeux beaucoup plus lisibles. Si vous vous trouvez frapper. C’est beaucoup, et vous le ferez, j’ai aussi écrit une fonction qui (temporairement) écrase le “OK”. Invite en applant une impression de pile à celui-ci, chaque fois que vous appuyez sur Entrée. Tapez impression.stack et appuyez sur Entrer un beaucoup plus de temps pour voir comment cela fonctionne. Frapper le bouton de réinitialisation ou la saisie de la réinitialisation effacera tout en RAM, ce qui inclut l’invite d’impression de pile, vous serez donc de retour à une ardoise propre.
C’est probablement un bon moment pour jouer avec les opérateurs de la pile. Avez-vous lu le glossaire MECRISP? Découvrez la liste des opérations de jonglerie de pile là-bas. Allumez-la impression et jouez jusqu’à ce qu’ils aient un sens.
Avez-vous déjà dirigé des mots? Il accueille une liste liée de chaque mot que le début sait, ainsi que les emplacements de mémoire où ils vivent et des détails supplémentaires – trop de détails, à moins que vous ne déboutiez le système lui-même. Il y a un mot supplémentaire, non standard, mot dans MECRISP qui imprime simplement les noms de fonction: liste. Donnez cela un coup maintenant. Si vous n’avez pas déjà défini quelques mots, faites-le.
: Hw. “Bonjour, Monde!” cr;
est un bon à avoir sous la main.
Couches en mémoire
La mémoire de MECRISP-Stellaris est divisée en deux emplacements bruts: RAM et Flash. Tous les mots fournis avant la marque “- MECRISP-Stellaris Core -” sont en RAM et seront perdus lors de la réinitialisation ou de la mise sous tension. Les nouvelles fonctions de RAM seront annexées au front de la liste.
Après le “- MECRISP-Stellaris Core -” Mark vient des fonctions en flash. Dans les premières parties de Flash, avant “- Dictionnaire flash -” est le noyau classique MECRISP VEND. À partir de là jusqu’à ce que “<>” sont des mots tirés de la distribution MECRISP qui sont normalement utiles, y compris certaines fonctions de débogage et multitâche. Les «<>» précédentes sont les contributions des bibliothèques Embello, y compris de nombreuses définitions GPIO, et celles avant «<>» ont été ajoutées pour cette série postale.
Ce qui n’est pas évident, c’est que tous ces marqueurs avec des crochets qui les entourent sont des pierres angulaires. Ceux-ci vous permettent de clarifier rapidement jusqu’à cet emplacement de la mémoire. Donc, si vous avez ajouté des fonctions supplémentaires dans Flash et que vous souhaitez claquer sur l’état par défaut de Hackaday Edition, vous pouvez taper << Hackaday-Extras >>. Les fonctions supplémentaires seront effacées et la réinitialisation de la puce. (Notez que cela perd tout ce qui était en RAM!) La commande ERASEFLASH va vous ramener au marqueur “- Dictionnaire Flash -“.
Histoire écrasante
Si vous définissez un mot deux fois avec le même nom, vous aurez deux versions du mot dans le dictionnaire. Lorsqu’un mot est appelé ou compilé, l’interprète examine la mémoire, du haut de la RAM vers le bas, puis de la fin du flash au début. Les mots avec le même nom en RAM sont donc appelés avant ceux en flash. Ce qui peut être particulièrement étrange, c’est que, comme il compile en temps réel, le mot qui est mentionné dans n’importe quel mot d’appel est celui qui était sur le dessus au moment de la définition du mot appelant. Faire des histoires enchevêtrées est un moyen sûr d’aller fou.
: foo. “Foo!” ;
: Bar foo. “Bar!” ;
Bar foo! bar! d’accord.
: foo. “Bizzle!” ; Redéfinir foo. d’accord.
foo bizzle! d’accord.
Bar foo! bar! d’accord.
D’autre part, voici un excellent moyen de travailler qui profite de ces différentes fonctionnalités de mémoire. La RAM est effacée à chaque réinitialisation, vous donnant une ardoise propre, mais en utilisant des pierres angulaires, le flash n’est pas immuable non plus. Bien sûr, plus vous devez effacer le flash,Plus vous devez redéfinir plus tard, en supposant que certains d’entre eux étaient utiles. Cela suggère une technique en couches au développement, avec les mots les plus «noyau» plus profonds en flash. C’est aussi naturel car les mots doivent être définis à être appelés, alors définir les bases a d’abord le sens de toute façon.
Vous pouvez compiler un nouveau mot à la RAM (la valeur par défaut) en appelant CompileToram ou en clignotant en invoquant CompiletOflash. Prototype vos mots en RAM. Sentez-vous gratuitement de les écraser aussi beaucoup de fois que vous le souhaitez, mais rappelez-vous que vous devez redéfinir des mots dépendants après avoir changé quelque chose en amont pour conserver l’historique d’appel intact. Une fois que vous êtes fait avec un morceau de développement, tapez la réinitialisation et la RAM claire. Maintenant redéfinir ces mots en flash. Si vous développez votre application à partir de bas en haut, vous constaterez que tout cela se bloque bien. Lorsque vous avez découvert un bug dans quelque chose qui est déjà écrit pour flash, les pierres angulaires arrivent à la rescousse.
Enfin, cette nature de la nature des définitions de quatraire peut être vraiment pratique. Par exemple, une fonction init de la fonction définie dans Flash est exécutée à chaque réinitialisation. Il inclut des éléments tels que définir la vitesse du processeur et la coche du système, que vous ne voulez probablement pas vous gâcher. Parce que vous pouvez écraser INIT, et toute compilation utilise les mots disponibles au moment de la compilation, vous pouvez simplement calmer votre fonctionnalité sur Init :: init init. “howdy!” cr;. Le premier “init” est le nom du mot nouveau, et le second appelle l’init préexistant et faisant toute la configuration. Le reste de la définition est à vous de jouer avec. Sur Redémarrez, tout sera effectué dans l’achat, il a été défini.
Conforts de créature
J’écris beaucoup de code dans un éditeur (VIM), puis envoyez-le à la puce pour jouer avec. Très spécifiquement, j’ai écrit un script appelé intitulé_upload.sh qui contient les éléments suivants:
[[$ 1]] && terme = 1 $ || Terme = / dev / ttyusb0
Retard = 0.2
En lisant -r f; faire écho “$ f”; écho “$ f”> $ terme; sommeil $ {retard} S; terminé
Pour envoyer un fichier au port série, et donc pour vider, vers-fichier_upload.sh