Les langages fonctionnels comme Haskell, LISP ou Scheme permettent à un programmeur de travailler rapidement en utilisant le paradigme de programmation fonctionnelle . Ils ont leurs inefficacités , mais mon application met davantage l'accent sur l'efficacité du programmeur que sur l'efficacité du programme lui-même.
J'aimerais utiliser la programmation fonctionnelle sur un microcontrôleur pour faire le contrôle de la machine, etc.
Quelles sont les limitations, telles que les ressources système minimales?
Quels exemples d'implémentations de ces langages sont disponibles?
microcontroller
programming
J. Polfer
la source
la source
Réponses:
http://armpit.sourceforge.net/
Vous dites:
L'utilisation de langages de haut niveau est une utilisation plus efficace du temps du programmeur, mais peut souvent être une utilisation moins efficace des ressources informatiques. Pour les systèmes embarqués fabriqués en volume, les coûts et les performances sont souvent plus prioritaires que les efforts de développement.
la source
Vous pouvez également programmer des contrôleurs AVR avec Haskell à l'aide d'Atom / Copilot, par exemple http://leepike.wordpress.com/2010/12/18/haskell-and-hardware-for-the-holidays/
la source
C, C ++ et Assembly sont tous très proches du langage machine. En utilisant un langage de niveau supérieur, vous ajoutez des frais généraux supplémentaires en échange d'un développement plus rapide / plus facile / etc.
la source
J'ai programmé une carte ARM en Python récemment, et je pense que c'est génial. Ce n'est pas bon pour le contrôle en temps réel, mais je fais plus de choses liées au Web, ce qui est beaucoup plus agréable dans un langage de haut niveau qu'en C.
la source
La majorité des microcontrôleurs sont toujours des appareils 8 et 16 bits (bien que cela change lentement). Les deux instances de langages de niveau supérieur (Scheme et Python) mentionnées dans d'autres réponses jusqu'à présent fonctionnent toutes les deux sur des cœurs ARM 32 bits. Les petits appareils 8 et 16 bits (qui peuvent ne coûter que quelques dollars) n'ont pas assez de RAM pour prendre en charge les langues mentionnées - généralement, ils n'ont que quelques Ko de RAM.
En outre, ces langages de niveau supérieur ne sont pas conçus pour écrire des gestionnaires d'interruption à faible latence et similaires. Il n'est pas rare qu'un gestionnaire d'interruption de microcontrôleur soit appelé des centaines ou des milliers de fois par seconde, et chaque fois nécessaire pour effectuer sa tâche en quelques dizaines de microsecondes ou moins.
la source
Il est possible de faire de la programmation fonctionnelle avec le langage Lua. Vraiment, Lua est une langue multi-paradigme; Wikipédia affirme qu'il s'agit d'un langage «scripté, impératif, fonctionnel, orienté objet, basé sur un prototype». Le langage n'applique pas un seul paradigme, mais est à la place suffisamment flexible pour permettre au programmeur de mettre en œuvre le paradigme applicable à la situation. Il a été influencé par Scheme.
Les fonctionnalités de Lua incluent des fonctions de première classe , la portée lexicale et les fermetures et coroutines , qui sont utiles pour la programmation fonctionnelle. Vous pouvez voir comment ces fonctionnalités sont utilisées sur le wiki des utilisateurs de Lua, qui a une page dédiée à la programmation fonctionnelle . J'ai également rencontré ce projet Google Code , mais je ne l'ai pas utilisé (il prétend être influencé par Haskell, une autre langue que vous avez mentionnée).
eLua est une implémentation disponible configurée pour un certain nombre de cartes de développement pour les architectures ARM7TMDI, Cortex-M3, ARM966E-S et AVR32, et est open-source afin que vous puissiez la configurer pour votre propre plate-forme. Lua est implémenté en ANSI C et la source entière pèse moins de 200 Ko, vous devriez donc pouvoir le construire pour la plupart des plates-formes avec un compilateur C. Au moins 128k de Flash et 32k de RAM est recommandé. Je travaille sur un port PIC32 pour celui-ci (toujours à l'étape "Get the PIC32 board", cependant) pour le moment.
La grande chose à propos de Lua est qu'il a été conçu comme un langage de collage, il est donc très facile d'écrire des extensions C pour les choses qui doivent être rapides (comme les interruptions, etc.), et d'utiliser les fonctionnalités dynamiques et interprétées du langage pour faire rapidement développement dans la logique du programme.
Lua n'est pas un langage purement fonctionnel, mais vous pouvez y faire beaucoup de programmation fonctionnelle, il est rapide et petit ( par rapport aux autres langages de script ), et vous n'avez pas besoin de reflasher votre appareil pour essayer un programme. Il y a même un interprète interactif!
la source
"Existe-t-il des moyens de faire une programmation fonctionnelle avec un langage fonctionnel sur un MCU pour résoudre des problèmes difficiles?"
Oui, il existe des moyens. Mais l'inconvénient est que vous avez besoin d'un processeur 32 bits, MMU, 128 Mo de RAM, SSD, un RTOS et $$$.
Les microcontrôleurs sont différents des microprocesseurs. Le microcontrôleur ne peut être qu'un processeur 8 bits, 1 Ko de RAM, 8 Ko de ROM, mais il a un UART, PWM, ADC intégré, etc. Et cela ne coûte que 1,30 $.
Donc, vous pourriez avoir toutes ces langues de haut niveau en cours d'exécution, mais cela coûte beaucoup plus cher à faire.
la source
Ce livre fournit un moyen de faire de la programmation avec une sensation légère de FP. http://www.state-machine.com/psicc2/
Mais le vrai FP nécessite d'avoir la capacité de construire des fonctions en runtime et de les transmettre à travers votre programme. Ici, nous avons un problème: comment représenter cette fonction construite? et comment pouvons-nous exécuter efficacement cette fonction? Sur un grand système, nous pouvons utiliser une compilation dynamique qui génère du code machine réel sur une application de première fonction. Sur MCU, nous n'avons que de la RAM pour implémenter des compilateurs très primitifs comme le noyau du langage Forth.
La seule façon d'utiliser FP ou OOP si vous préférez c'est la métaprogrammation : écrire des programmes fonctionnels / OOP complexes qui génèrent des programmes pour MCU (code source C par exemple, ou LLVM IL). Dans cette variante, vous n'êtes pas limité par le paradigme ou la complexité des méthodes de programmation.
la source