Eine gut interpretierte Sprache für ein kleines eingebettetes Projekt [geschlossen]

8

Ich habe einen mbed-Mikrocontroller mit einem kleinen ARM Cortex M3 . Grundsätzlich sind meine effektiven Ressourcen für das Projekt ~ 25 KB RAM und ~ 400 KB Flash. Für E / A habe ich eine PS / 2- Tastatur, einen VGA-Framebuffer (mit Zeichenausgabe) und eine SD-Karte zum Speichern / Laden von Programmen (bis zu ein paar MB vielleicht).

Ich frage, weil ich versuche herauszufinden, welche Programmiersprache auf dem Ding implementiert werden soll. Ich suche nach einer interpretierten Sprache, die für mich einfach zu implementieren ist und die meine Ressourcen nicht sprengt. Ich beabsichtige auch, dass dies zumindest auf dem Gerät selbst geschrieben werden kann, obwohl der Editor interpretiert werden kann (yay, Bootstrapping).

Wie auch immer, ich habe mir ein paar einfache Sprachen angesehen. Einige nette Kandidaten:

Hat jemand so etwas getan oder kennt er Sprachen, die zu dieser Rechnung passen, oder hat er bisher Kommentare zu meinen drei Kandidaten?

Earlz
quelle
Wenn Ihre Skala zu klein ist, um zu LUA zu passen, bleiben Sie möglicherweise nur bei C und Ihrer eigenen Implementierung einer Sprache darin. Wenn Sie das passende Schema finden können, ist es ein großartiger Kandidat, um Ihre eigene einfache Skriptsprache zu schreiben.
Jimmy Hoffa
@ JimmyHoffa Sie sagen, ich sollte das Schema auf meinem Gerät implementieren und dann von dort aus eine Skriptsprache im Schema implementieren? doppelte Interpretation? lol
Earlz
Nein, ich beziehe mich darauf, einen Interpreter in Schema zu schreiben und diesen Interpreter dann in native zu kompilieren. Ich bin mir zwar sicher, dass es bessere Compiler für das Schema gibt, aber hier ist der erste Google Pop für das kompilierte Schema: matt.might.net/articles/compiling-scheme-to-c
Jimmy Hoffa
Ich möchte hinzufügen, dass das eLua- Projekt auch einen Port für ARM M3 hat. Ich denke, dass dies für Sie nützlich sein wird.
Machado
Es gibt mehrere Tiny Basic-Interpreter (einige in C geschrieben), bei denen der gesamte Speicherbedarf nur 16 KB betragen kann (noch weniger bei den in ASM geschriebenen).
hotpaw2

Antworten:

6

Für das, was Sie beschrieben haben, ist FORTH wahrscheinlich ideal. FORTH läuft routinemäßig auf viel kleineren Plattformen als Ihrer. (16K insgesamt ist eine große Maschine für FORTH.) Es wird eine ernsthafte Lernkurve geben, wenn Sie sich FORTH noch nie angesehen haben.

Es gibt eine Schema-Implementierung namens TinyScheme (wie ich mich erinnere), die einen Blick wert sein könnte. Ich habe zum ersten Mal davon in einem Artikel über Slashdot gehört, von einem Typen, der es als Kern seiner Malware-Engine verwendet hat. (Ja, das ist richtig: Seine Aufgabe war es, Malware für irgendetwas zu schreiben, und dies in TinyScheme zu tun, bedeutete, dass ihre Nutzlast viel kleiner sein könnte.)

John R. Strohm
quelle
Ich sah TinyScheme an. Ich denke, es würde funktionieren, aber ich kenne Scheme überhaupt nicht. Also dachte ich, Forth wäre einfacher, meinen Kopf herumzuwickeln (was es ist). Ich würde Forth nicht als eine absolut große Lernkurve betrachten, ich habe jedoch schon früher mit Stapelmaschinen gearbeitet, deshalb ist es für mich wahrscheinlich ziemlich natürlich, heh. Forth eignet sich jedoch hervorragend dafür, da es trivial ist, später eine grobe Form von JIT und dergleichen zu
erstellen
Also zusammenfassend. Am Ende schrieb ich meinen eigenen (nicht konformen) Forth-Dolmetscher.
Earlz
Leo Brodies Klassiker "Starting FORTH" ist bei weitem die beste Einführung in FORTH, die ich je gefunden habe, auch wenn er eine sehr alte Version der Sprache und Umgebung beschreibt (16-Bit-PolyFORTH von FORTH Inc.). Wenn Sie eine Kopie finden, erklärt Loeligers "Threaded Interpretive Languages" sehr gut, wie FORTH auf einem Zilog Z80-Mikroprozessor implementiert wird.
John R. Strohm
11

Ich werde den Fall vertreten, dass Lua bei weitem Ihre beste Wahl ist. Sie können Lua überall dort kompilieren, wo C ausgeführt werden kann, und es ist eine der leichtesten Skriptsprachen überhaupt. Es ist als Sprache sehr flexibel und die Fähigkeiten sind auch ziemlich übertragbar. Es gibt sogar eine speziell eingebettete Version von Lua .

Nachtrag: Es ist anscheinend möglich , den Speicherbedarf auf etwas mehr als 25 KB zu senken.

Nachtrag 2 - Die Dinge werden verrückt: Es gibt eine Option, die durch diese SO-Frage aufgeworfen wird . Eichhörnchen ist eine Sprache, von der ich gehört habe, die ich aber nie benutzt habe. Es ist anscheinend sogar kleiner als Lua aufgrund der Verwendung der Referenzzählung.

Weltingenieur
quelle
Es gibt eLuaaber es liegt außerhalb meiner Reichweite für Ressourcen. Grundsätzlich sind
32 KB
1
Lua wird niemals in der Lage sein, mit Forth im Fußabdruck zu konkurrieren.
SK-Logik
Nie gesagt, es könnte. Lua ist den meisten Programmierern allerdings nicht so fremd.
Weltingenieur
+1 für Lua und eLua .
Machado
Wenn mein Prozessor etwas mehr RAM hätte, würde ich eLua verwenden, aber leider nicht, also schreibe ich einen kleinen Forth-Compiler
Earlz
1

In Bezug auf einbettbare Skriptsprachen sind die 2, mit denen ich vertraut bin, LUA und PAWN .

Ich denke, es gibt Versionen von Python und anderen solchen Sprachen, die auf eingebettete Systeme portiert sind, aber sie sind in der Regel die eingebettete Linux-Variante. Abhängig von Ihrer Plattform (keine Ahnung, ob es sich um eine kleine MCU mit 8K-ROM oder einem eingebetteten PC handelt) ist dies möglicherweise eine Option.

Yusubov
quelle
1

Ich erinnere mich, dass ich vor einiger Zeit über Tcl / Tk und seine Verwendung in Routern gelesen habe.

Auszug aus dem Abschnitt "Embedded Development" unter http://www.tcl.tk/about/uses.html :

Da Tcl eine sehr kompakte Sprache ist und sich leicht in spezielle Hardware integrieren lässt, ist es eine beliebte Wahl für die Embedded-Entwicklung. Sie finden Tcl auf vielen Geräten versteckt, einschließlich vieler Netzwerkprodukte von Cisco und anderen, sowie Set-Top-Boxen, einschließlich Tivo. Das Einbetten von Tcl in andere Softwareprojekte ist natürlich ebenfalls sehr beliebt und hat sich in einigen Branchen zur dominierenden Steuerungssprache entwickelt, z. B. in EDA- (Electronic Design Automation) und CAD-Anwendungen (Computer Aided Design).

davidk01
quelle
1
Sie müssen tk nicht zusammen mit Tcl ziehen - Tcl ist eine gute Sprache für sich. Sie könnten auch "TinyTcl" - sourceforge.net/projects/tinytcl
Bryan Oakley