Uma boa linguagem interpretada para um pequeno projeto incorporado [fechado]

8

Eu tenho um microcontrolador mbed que possui um pequeno ARM Cortex M3 . Basicamente, meus recursos efetivos para o projeto são ~ 25 KB de RAM e ~ 400 KB de Flash. Para E / S, terei um teclado PS / 2 , um buffer de quadros VGA (com saída de caracteres) e um cartão SD para salvar / carregar programas (até alguns MB, talvez).

Eu pergunto porque estou tentando descobrir qual linguagem de programação implementar na coisa. Estou procurando uma linguagem interpretada que seja fácil de implementar e que não prejudique meus recursos. Também pretendo que isso seja pelo menos possível escrever no próprio dispositivo, embora o editor possa ser interpretado (sim, inicialização).

Enfim, eu olhei para alguns idiomas simples. Alguns bons candidatos:

Alguém já fez algo parecido com isso ou conhece algum idioma que se encaixa nesse projeto ou tem comentários sobre meus três candidatos até agora?

Earlz
fonte
Se a sua escala for muito pequena para caber no LUA, você poderá apenas ficar com o C e com sua própria implementação de um idioma. Se você pode obter esquema para ajuste então é um grande candidato para escrever o seu próprio simples linguagem de script no.
Jimmy Hoffa
@ JimmyHoffa você está dizendo que eu deveria implementar o esquema no meu dispositivo e, a partir daí, implementar uma linguagem de script no esquema? dupla interpretação? lol
Earlz
Não, estou me referindo a escrever um intérprete no esquema e depois compilá-lo como nativo. Embora eu tenho certeza que existem melhores compiladores para esquema do que isso, mas aqui está o primeiro pop google para o esquema compilado: matt.might.net/articles/compiling-scheme-to-c
Jimmy Hoffa
Gostaria de acrescentar que o projeto eLua também tem uma porta para o ARM M3, acho que será útil para você.
Machado
Existem vários intérpretes do Tiny Basic (alguns escritos em C), em que o espaço total de memória pode ser tão pequeno quanto 16kB (menos ainda para os escritos em ASM).
hotpaw2

Respostas:

6

Pelo que você descreveu, FORTH é provavelmente o ideal. FORTH rotineiramente roda em plataformas muito menores que as suas. (O total de 16K é uma grande máquina para a FORTH.) Haverá alguma curva de aprendizado séria envolvida, se você nunca olhou para a FORTH antes.

Há uma implementação de esquema chamada TinyScheme (se bem me lembro), que pode valer a pena dar uma olhada. Eu ouvi sobre isso pela primeira vez em um artigo no Slashdot, sobre um cara que o usou como o núcleo de seu mecanismo de malware. (Sim, isso mesmo: o trabalho dele era escrever malware, para uma coisa ou outra, e fazê-lo no TinyScheme significava que a carga útil poderia ser muito menor.)

John R. Strohm
fonte
Eu olhei para o TinyScheme. Eu acho que funcionaria, mas não conheço nenhum esquema. Então, achei que Forth seria mais fácil de entender (o que é). Eu não consideraria a Forth uma curva de aprendizado absolutamente grande, já trabalhei com máquinas de pilha antes, então é provavelmente por isso que me parece bastante natural heh. Forth é excelente para isso, porém, porque isso é trivial para estender mais tarde para fazer uma forma grosseira de JIT e tal ... e implementação consiste em uma pilha, um dicionário, e alguns construído em palavras
Earlz
Então, em resumo. Acabei escrevendo meu próprio intérprete (não compatível).
Earlz 19/09/12
O clássico "Starting FORTH" de Leo Brodie é de longe a melhor introdução ao FORTH que eu já encontrei, mesmo que descreva uma versão muito antiga da linguagem e do ambiente (polyFORTH de 16 bits, da FORTH Inc.). Se você puder encontrar uma cópia, as "Linguagens Interpretativas Encadeadas" da Loeliger explicam muito bem como implementar o FORTH em um microprocessador Zilog Z80.
John R. Strohm
11

Vou argumentar que Lua é de longe a sua melhor aposta. Você pode compilar Lua em qualquer lugar em que C possa ser executado e é uma das linguagens de script mais leves existentes. É extremamente flexível como idioma e as habilidades também são transferíveis. Existe até uma versão especificamente incorporada do Lua .

Adendo: Aparentemente, é possível reduzir o espaço da memória para pouco mais de 25K.

Adendo 2 - As coisas ficam loucas: existe uma opção apresentada por essa pergunta do SO . Esquilo é uma linguagem que eu já ouvi falar, mas nunca usei. Aparentemente, é ainda menor que Lua devido ao uso da contagem de referência.

Engenheiro Mundial
fonte
Existe, eLuamas está fora do meu alcance de recursos. Basicamente 32K de RAM é necessário para qualquer coisa útil
Earlz
1
Lua nunca será capaz de competir com Forth em pegada.
SK-logic
Nunca disse que poderia. Lua não é tão estranha para a maioria dos programadores.
World Engineer
+1 para Lua e eLua .
Machado
Se meu processador tinha um pouco mais de RAM, eu usaria eLua, mas infelizmente isso não acontecer, então eu estou escrevendo um pequeno compilador Forth
Earlz
1

Em relação às linguagens de script incorporáveis, as duas com as quais estou familiarizado são LUA e PAWN .

Eu acho que existem versões do Python e outras linguagens desse tipo portadas para sistemas embarcados, mas elas tendem a ser a variedade Linux embarcada. Dependendo da sua plataforma (não faço ideia se é um pequeno MCU com 8K ROM ou um PC incorporado), isso pode ser uma opção.

Yusubov
fonte
1

Lembro-me de ler há algum tempo sobre o Tcl / Tk e seu uso em roteadores.

Trecho do parágrafo "Desenvolvimento incorporado", encontrado em http://www.tcl.tk/about/uses.html :

Como o Tcl é uma linguagem muito compacta e é facilmente integrada a hardware especial, é uma escolha popular para desenvolvimento incorporado. Você encontrará o Tcl escondido em muitos dispositivos, incluindo muitos produtos de rede da Cisco e outros, e decodificadores, incluindo o Tivo. A incorporação do Tcl em outros projetos de software também é imensamente popular e tornou-se a linguagem de controle dominante em alguns setores, como em aplicativos de automação de design eletrônico (EDA) e design auxiliado por computador (CAD).

davidk01
fonte
1
Você não precisa arrastar tk junto com Tcl - o Tcl é uma linguagem fina por si só. Você também pode considerar "TinyTcl" - sourceforge.net/projects/tinytcl
Bryan Oakley