Un buen lenguaje interpretado para un pequeño proyecto incrustado [cerrado]

8

Tengo un microcontrolador mbed que tiene un pequeño ARM Cortex M3 . Básicamente, mis recursos efectivos para el proyecto son ~ 25 KB de RAM y ~ 400 KB de Flash. Para E / S, tendré un teclado PS / 2 , un framebuffer VGA (con salida de caracteres) y una tarjeta SD para guardar / cargar programas (hasta un par de MB quizás).

Pregunto porque estoy tratando de averiguar qué lenguaje de programación implementar en la cosa. Estoy buscando un lenguaje interpretado que me sea fácil de implementar y que no rompa el banco de mis recursos. También tengo la intención de que esto sea al menos posible escribir en el dispositivo en sí, aunque el editor se puede interpretar (sí, bootstrapping).

De todos modos, he visto algunos idiomas simples. Algunos buenos candidatos:

¿Alguien ha hecho algo como esto o sabe de algún idioma que se ajuste a este proyecto de ley o tenga comentarios sobre mis tres candidatos hasta ahora?

Earlz
fuente
Si su escala es demasiado pequeña para adaptarse a LUA, es posible que se quede atascado con C y su propia implementación de un lenguaje. Si puede lograr que el esquema se ajuste, entonces es un gran candidato para escribir su propio lenguaje de script simple.
Jimmy Hoffa
@JimmyHoffa, ¿estás diciendo que debería implementar el esquema en mi dispositivo y luego implementar un lenguaje de scripting en el esquema? doble interpretación? lol
Earlz
No, me refiero a escribir un intérprete en esquema, luego compilar ese intérprete en nativo. Aunque estoy seguro de que hay mejores compiladores para el esquema que este, pero aquí está el primer pop de Google para el esquema compilado: matt.might.net/articles/compiling-scheme-to-c
Jimmy Hoffa
Me gustaría agregar que el proyecto eLua también tiene un puerto para ARM M3, creo que será útil para usted.
Machado
Hay varios intérpretes de Tiny Basic (algunos escritos en C), donde la huella total de la memoria puede ser tan pequeña como 16kB (incluso menos para los escritos en ASM).
hotpaw2

Respuestas:

6

Por lo que ha descrito, FORTH es probablemente ideal. FORTH se ejecuta habitualmente en plataformas mucho más pequeñas que la suya. (16K en total es una gran máquina para FORTH.) Habrá una curva de aprendizaje seria involucrada, si nunca antes has visto FORTH.

Hay una implementación de Scheme llamada TinyScheme (como recuerdo), que podría valer la pena. Lo escuché por primera vez de un artículo en Slashdot, sobre un tipo que lo usó como el núcleo de su motor de malware. (Sí, es cierto: su trabajo consistía en escribir malware, para algo u otro, y hacerlo en TinyScheme significaba que su carga útil podría ser mucho menor).

John R. Strohm
fuente
Miré a TinyScheme. Creo que funcionaría, pero no conozco a Scheme en absoluto ... Entonces, pensé que Forth sería más fácil de entender (lo cual es). No consideraría que Forth tuviera una curva de aprendizaje absolutamente enorme, aunque he trabajado con máquinas apiladoras antes, así que probablemente es por eso que me resulta bastante natural, je. Sin embargo, Forth es excelente para esto porque es trivial extenderse más tarde para hacer una forma cruda de JIT y tal ... y la implementación consiste en una pila, un diccionario y algunas palabras
integradas
Entonces, en resumen. Terminé escribiendo mi propio (no compatible) intérprete Forth.
Earlz
El clásico "Starting FORTH" de Leo Brodie es, con mucho, la mejor introducción a FORTH que he encontrado, incluso si describe una versión muy antigua del lenguaje y el entorno (polyFORTH de 16 bits, de FORTH Inc.). Si puede encontrar una copia, los "Lenguajes interpretativos roscados" de Loeliger explican muy bien cómo implementar FORTH en un microprocesador Zilog Z80.
John R. Strohm
11

Voy a argumentar que Lua es, con mucho, su mejor apuesta. Puede compilar Lua en cualquier lugar que C pueda ejecutar y es uno de los lenguajes de script más ligeros que existen. Es enormemente flexible como idioma y las habilidades también son bastante transferibles. Incluso hay una versión específicamente integrada de Lua .

Anexo: Al parecer, es posible reducir la huella de la memoria a poco más de 25K.

Anexo 2 - Las cosas se vuelven locas: esta pregunta SO plantea una opción . Squirrel es un lenguaje del que he oído hablar pero que nunca he usado. Aparentemente es incluso más pequeño que Lua debido al uso del recuento de referencias.

Ingeniero mundial
fuente
Hay eLuapero está fuera de mi rango de recursos. Básicamente, se requieren 32K de RAM para cualquier cosa útil
Earlz
1
Lua nunca podrá competir con Forth en huella.
SK-logic
NUNCA dije que podría. Sin embargo, Lua no es tan ajeno a la mayoría de los programadores.
Ingeniero mundial
+1 para Lua y eLua .
Machado
Si mi procesador tuviera un poco más de RAM, usaría eLua, pero desafortunadamente no lo tiene, así que estoy escribiendo un pequeño compilador de Forth
Earlz
1

En cuanto a los lenguajes de secuencias de comandos integrables, los 2 con los que estoy familiarizado son LUA y PAWN .

Creo que hay versiones de Python y otros lenguajes similares portados a sistemas embebidos, pero tienden a ser la variedad Linux embebida. Dependiendo de su plataforma (no tengo idea si es una pequeña MCU con 8K ROM o una PC integrada), esa podría ser una opción.

Yusubov
fuente
1

Recuerdo haber leído hace algún tiempo sobre Tcl / Tk y su uso en enrutadores.

Extracto del párrafo "Desarrollo integrado" que se encuentra en http://www.tcl.tk/about/uses.html :

Debido a que Tcl es un lenguaje muy compacto y se integra fácilmente con hardware especial, es una opción popular para el desarrollo integrado. Encontrará Tcl oculto en muchos dispositivos, incluidos muchos productos de red de Cisco y otros, y decodificadores, incluido Tivo. La incorporación de Tcl en otros proyectos de software también es muy popular, y se ha convertido en el lenguaje de control dominante en algunas industrias, como en aplicaciones de automatización de diseño electrónico (EDA) y diseño asistido por computadora (CAD).

davidk01
fuente
1
No tiene que arrastrar tk junto con Tcl: Tcl es un buen lenguaje en sí mismo. También podría considerar "TinyTcl" - sourceforge.net/projects/tinytcl
Bryan Oakley