Ich suche Allzweck-Programmiersprachen, die
- eine interaktive Eingabeaufforderung (Live-Codierung) haben
- Arbeiten Sie in 32 KB RAM selbst oder in 8 KB, wenn der Compiler auf einem separaten Computer gehostet wird
- Laufen Sie auf einem Mikrocontroller mit nur 8-32 KB RAM (ohne MMU).
Unten ist meine Liste bis jetzt, was vermisse ich?
- Python : Die PyMite-VM benötigt 64 KB Flash und 8 KB RAM. Zielt auf LPC, SAM7 und ATmegas mit 8K oder mehr ab. Bereitgestellt.
- Lua : In den eLua- FAQ werden 256 KB Flash und 64 KB RAM empfohlen.
- FORTH : amforth benötigt 8K Flash, 150 Byte RAM, 30 Byte EEPROM auf einem ATmega.
- Schema : Achselschema Schema Das kleinste Ziel ist der LPC2103 mit 32K Flash, 4K SRAM.
- C : Interactive C läuft auf 68HC11 ohne Flash und 32K SRAM. Bereitgestellt.
- C : picoc ein Open Source, Cross-Compiling, interaktives C-System. Bei der Kompilierung für AVR werden 63 KB Flash und 8 KB RAM benötigt. Der Arbeitsspeicher könnte reduziert werden, um die Tabellen im Flash zu halten.
- C ++ : AngelScript ist eine Open Source, Bytecode-basierte, C / C ++ - ähnliche Skriptsprache mit einfachen nativen Aufrufen.
- Tcl : TinyTCL läuft unter DOS, 60K Binär. Sieht einfach zu portieren aus.
- BASIC : TinyBasic : Initialisiert mit einem 64K-Heap und ist möglicherweise anpassbar.
- Lispeln
- PostScript : (Ich habe noch keine FOSS-Implementierung für wenig Speicher gefunden.)
- Shell : bitlash : Eine interaktive Befehlsshell für Arduino (ATmega). Siehe auch AVRSH .
Antworten:
Eine Homebrew-Forth-Laufzeit kann in der Tat in sehr wenig Speicher implementiert werden. Ich kenne jemanden, der in den 1970er Jahren einen auf einem Cosmac gemacht hat. Die Kernlaufzeit betrug nur 30 Bytes.
quelle
Ich habe gehört, dass CHIP-8, XPL0, PicoC und Objective Caml auf Grafikrechner portiert wurden. Der Wikipedia-Artikel "Lego Mindstorms" listet eine Reihe von Programmiersprachen auf, die angeblich auf der Lego RCX- oder Lego NXT-Plattform laufen. Erfüllt einer von ihnen Ihre "Live-Codierungs" -Kriterien?
Vielleicht möchten Sie sich die anderen Mikrocontroller-Forths im Forth-Wiki ansehen. Es werden mindestens 4 Forths für den Atmel AVR aufgelistet: amforth (den Sie bereits erwähnen), PFAVR, avrforth und ByteForth.
(Links zu diesen Interpreten sowie diese StackOverflow-Frage sind im Wikibook " Embedded Systems " enthalten.)
quelle
Ich würde LUA (oder eLUA http://www.eluaproject.net/ ) empfehlen . Ich habe LUA vor einiger Zeit auf einen Cortex-M3 "portiert". Von der Oberseite meines Kopfes hatte es eine Flash-Größe von 60 ~ 100 KB und benötigte ungefähr 20 KB RAM, um zu laufen. Ich habe mich auf das Wesentliche beschränkt, aber je nach Ihrer Anwendung könnte das ausreichen. Es gibt noch Raum für Optimierungen, insbesondere in Bezug auf die RAM-Anforderungen, aber ich bezweifle, dass Sie es bequem in 8 KB ausführen können.
quelle
Einige AVR-Interpreter / VMs:
quelle
Wren entspricht Ihren Kriterien - standardmäßig ist es so konfiguriert, dass nur 4 KB RAM verwendet werden. AFAIK es hat keine wirkliche Verwendung gesehen, da der Typ, für den ich es geschrieben habe, entschieden hat, dass er keinen Dolmetscher braucht, der vollständig auf dem Zielsystem läuft.
Die Sprache wird am offensichtlichsten von ML und Forth beeinflusst.
quelle
Haben Sie einen Port in C of Tiny Basic in Betracht gezogen ? Oder schreiben Sie die UCSD Pascal p-Maschine von Z-80 in Ihre Architektur um?
Im Ernst, JavaScript wäre eine gute eingebettete Skriptsprache, aber ich habe keine Ahnung, wie hoch die Mindestspeicheranforderungen für VM + GC sind und wie schwierig es ist, Betriebssystemabhängigkeiten zu entfernen. Ich habe vor einiger Zeit mit NJS gespielt , was möglicherweise Ihren Bedürfnissen entsprechen könnte. Dieser ist insofern interessant, als der Compiler in JavaScript (Self-Hosting) geschrieben ist.
quelle
Sie können sich einen sehr leistungsstarken AvrCo Multitasking Pascal für AVR ansehen. Sie können es unter http://www.e-lab.de versuchen . Die MEGA8 / 88-Version ist kostenlos. Es gibt unzählige Treiber und Simulatoren mit JTAG-Debugger und schönen Live- oder simulierten Visualisierungen aller Standardgeräte (LCDCHAR, LCDGRAPH, 7SEG, 14SEG, LEDDOT, KEYBOARD, RC5, SERVO, STEPPER ...).
quelle
Sie vermissen EmbedVM, Homepage hier , SVN Repo hier . Denken Sie daran, beide [ 1 , 2 ] Videos auf der Titelseite zu lesen;)
Von der Homepage:
Die C-ähnliche Sprache sieht folgendermaßen aus: http://svn.clifford.at/embedvm/trunk/examples/numberquizz/vmcode.evm
quelle
Ich würde MY-BASIC empfehlen , läuft mit mindestens 8 KB RAM und ist einfach zu portieren.
quelle
Es gibt auch JavaScript über Espruino .
Dies wurde speziell für Mikrocontroller entwickelt und es gibt Builds für verschiedene Chips (hauptsächlich STM32s), die ein vollständiges System in nur 8 KB RAM passen.
quelle
Haben Sie darüber nachgedacht, einfach die
/bin/sh
von Busybox gelieferte zu verwenden ? Oder eine der kleineren Skriptsprachen, die sie empfehlen?quelle
Prolog - http://www.gprolog.org/
Laut einer Google-Suche "prolog small" kann die Größe der ausführbaren Datei ziemlich klein gemacht werden, indem vermieden wird, dass die integrierten Prädikate verknüpft werden.
quelle
Keine der Sprachen in der Liste in der Frage oder in den Antworten erwies sich als zufriedenstellend für die Anforderung einer supereinfachen Kompilierung und Integration in ein bestehendes Mikrocontroller-Projekt (Offenlegung: Ich habe nicht jeden einzelnen der Vorschläge ausprobiert).
Ich habe stattdessen tinyscript gefunden , eine einzelne
.c
+.h
Datei, die mit den restlichen Quelldateien in meinem Projekt kompiliert wurde. Die einzige zusätzliche Konfiguration, die erforderlich ist, besteht darin, eine Datei bereitzustellen,void outchar(int c)
die leer sein kann, wenn Sie keine Ausgabe von den Skripten benötigen.Für mich ist die Ausführungsgeschwindigkeit weitaus weniger wichtig als die einfache Erstellung und Integration sowie die Interaktion mit C, da mein Anwendungsfall hauptsächlich darin besteht, einige C-Funktionen der Reihe nach aufzurufen.
quelle
Ich habe in meiner vorherigen Arbeit Busybox auf einem BlackFin verwendet.
wir haben perl + php dafür kompiliert, nachdem wir s / fork / vfork / g geändert haben, hat es ziemlich gut funktioniert ... mehr oder weniger. Keine MMU zu haben ist keine gute Idee. Die Speicherfragmentierung wird den Server ziemlich leicht töten. Alles was ich getan habe war:
Es starb, als ich zu meinem Chef ging und ihm sagte, dass der Server in der Produktion sterben wird :)
quelle
Ich würde vorschlagen, Python zu verwenden. Aber jetzt ist das einzige Problem der Speicheraufwand, oder? Ich habe also eine großartige Idee für Leute, die später in diesem Problem stecken bleiben könnten.
Als erstes schreiben Sie einen bf-Interpreter (oder holen Sie sich einfach den Quellcode von irgendwoher). Der Dolmetscher wird sehr klein sein. Auch bf ist eine vollständige Turing-Sprache. Jetzt müssen Sie Ihren Code in Python schreiben und ihn dann mit bfpy ( https://github.com/felko/bfpy/blob/master/README.md ) in bf transpilieren . Ich habe Ihnen die Lösung mit dem geringsten Aufwand gegeben und bin mir ziemlich sicher, dass ein bf-Interpreter problemlos unter 10 KB RAM-Auslastung bleibt.
quelle
Erlang - http://erlang.org/
es kann in 2MB passen
http://www.experts123.com/q/is-erlang-small-enough-for-embedded-systems.html
quelle