Los lenguajes funcionales como Haskell, LISP o Scheme permiten que un programador trabaje rápidamente usando el paradigma de programación funcional . Tienen sus ineficiencias , pero mi aplicación pone mayor énfasis en la eficiencia del programador que en la eficiencia del programa en sí.
Me gustaría usar la programación funcional en un microcontrolador para hacer el control de la máquina, etc.
¿Qué limitaciones existen, como los recursos mínimos del sistema?
¿Qué implementaciones de ejemplo de estos idiomas están disponibles?
microcontroller
programming
J. Polfer
fuente
fuente
Respuestas:
http://armpit.sourceforge.net/
Tu dices:
El uso de lenguajes de alto nivel es un uso más eficiente del tiempo del programador, pero a menudo puede ser un uso menos eficiente de los recursos informáticos. Para los sistemas embebidos fabricados en volumen, el costo y el rendimiento son a menudo de mayor prioridad que el esfuerzo de desarrollo.
fuente
También puede programar controladores AVR con Haskell utilizando Atom / Copilot, por ejemplo http://leepike.wordpress.com/2010/12/18/haskell-and-hardware-for-the-holidays/
fuente
C, C ++ y Assembly están muy cerca del lenguaje de máquina. Al utilizar un lenguaje de nivel superior, está agregando una sobrecarga adicional a cambio de un desarrollo más rápido / más fácil / etc.
fuente
He estado programando una placa ARM en Python recientemente, y creo que es genial. No es bueno para el control en tiempo real, pero estoy haciendo más cosas relacionadas con la web, lo que es mucho más agradable en un lenguaje de alto nivel que en C.
fuente
La mayoría de los microcontroladores siguen siendo dispositivos de 8 y 16 bits (aunque esto está cambiando lentamente). Las dos instancias de lenguajes de nivel superior (Scheme y Python) mencionados en otras respuestas hasta ahora se ejecutan en núcleos ARM de 32 bits. Los dispositivos más pequeños de 8 y 16 bits (que pueden costar solo un par de dólares) no tienen suficiente RAM para admitir los idiomas que se mencionan, por lo general, solo tienen unos pocos KB de RAM.
Además, estos lenguajes de nivel superior no están diseñados para escribir manejadores de interrupciones de baja latencia y similares. No es inusual que un controlador de interrupciones de microcontrolador sea llamado cientos o miles de veces por segundo, y cada vez que sea necesario para realizar su tarea en decenas de microsegundos o menos.
fuente
Es posible hacer una programación funcional con el lenguaje Lua. Realmente, Lua es un lenguaje de paradigmas múltiples; Wikipedia afirma que es un lenguaje 'scripting, imperativo, funcional, orientado a objetos y basado en prototipos'. El lenguaje no aplica un solo paradigma, sino que es lo suficientemente flexible como para permitir que el programador implemente cualquier paradigma que sea aplicable a la situación. Ha sido influenciado por Scheme.
Las características de Lua incluyen funciones de primera clase , alcance léxico y cierres y corutinas , que son útiles para la programación funcional. Puede ver cómo se utilizan estas funciones en el wiki de usuarios de Lua, que tiene una página dedicada a la programación funcional . También me encontré con este proyecto de Google Code , pero no lo he usado (afirma estar influenciado por Haskell, otro idioma que mencionaste).
eLua es una implementación que está disponible configurada para varias placas de desarrollo para las arquitecturas ARM7TMDI, Cortex-M3, ARM966E-S y AVR32, y es de código abierto para que pueda configurarla para su propia plataforma. Lua se implementa en ANSI C y toda la fuente pesa menos de 200kB, por lo que debería poder compilarla para la mayoría de las plataformas con un compilador de C. Se recomienda al menos 128k de Flash y 32k de RAM. Estoy trabajando en un puerto PIC32 para él (todavía en la etapa 'Obtener la placa PIC32') en este momento.
Lo mejor de Lua es que fue diseñado como un lenguaje de pegamento, por lo que es muy fácil escribir extensiones C para las cosas que deben ser rápidas (como interrupciones, etc.) y usar las características dinámicas e interpretadas del lenguaje para hacerlo rápido desarrollo en la lógica del programa.
Lua no es un lenguaje puramente funcional, pero puede hacer mucha programación funcional en él, es rápido y pequeño (en comparación con otros lenguajes de secuencias de comandos ), y no necesita volver a actualizar su dispositivo para probar un programa. ¡Incluso hay un intérprete interactivo!
fuente
"¿Hay maneras de hacer programación funcional con un lenguaje funcional en una MCU para resolver problemas difíciles?"
Sí, hay formas Pero la desventaja es que necesita un procesador de 32 bits, MMU, 128 MB de RAM, SSD, un RTOS y $$$.
Los microcontroladores son diferentes a los microprocesadores. El microcontrolador solo puede ser una CPU de 8 bits, 1K RAM, 8K ROM, pero tiene un UART, PWM, ADC incorporado, etc. Y solo cuesta $ 1.30.
Por lo tanto, podría tener todos esos lenguajes de alto nivel ejecutándose, pero cuesta mucho más hacerlos.
fuente
Este libro proporciona alguna forma de programar con una ligera sensación de FP. http://www.state-machine.com/psicc2/
Pero la FP real requiere tener la capacidad de construir funciones en tiempo de ejecución y pasarlas a través de su programa. Aquí tenemos un problema: ¿cómo podemos representar esta función construida? ¿Y cómo podemos ejecutar efectivamente esta función? En un sistema grande, podemos usar una compilación dinámica que genera código de máquina real en una aplicación de primera función. En MCU solo tenemos RAM para implementar compiladores muy primitivos como Forth Language Core.
La única forma en que puede usar FP u OOP si lo prefiere es la metaprogramación : escriba programas funcionales / OOP complejos que generen programas para MCU (código fuente C, por ejemplo, o LLVM IL). En esta variante, no está limitado por la complejidad del paradigma o los métodos de programación.
fuente