Ahoi,
folgendes Problem:
ist es möglich einen kleinen C-Compiler, auf einem ordentlichen
Mikrocontroller unterzubringen (z.B. einem großen Arm)? Die Idee wäre
dann eine Kleine Tastatur und ein LED-Display (Mono) samt Treiber
ranzuhängen und eine Art Mini-Rechner zu haben. Sinn dieses Gerätes
sollte es sein, kleine C-Progs ohne Rechnerhilfe zu Compilieren und dann
auszuführen. (Es handelt sich Vorrangig um Berechnungen etc. evtl. noch
eine Kleine Realais-Ansteuerung aber das wäre nur aus Spaß)
-> Mir wurde gesagt, dass der Speicher des Mikros nach einigen tausend
Schreibvorgängen in den A... geht, dass wäre natürlich suboptimal. Daher
die Idee: Man schließt einen Externen Flash-Speicher (z.B. SD) an. Nun
packt er den geschriebenen Code in eine .c Datei auf den Flash. Dann
holt er sie sich in den RAM, compiliert sie und packt sie z.B. als .hex
wieder auf die SD-Karte. So kann man jederzeit den Code noch anschauen
und der Speicher des Mikros wäre nicht benutzt (ausser für den
Compiler/Bootloader). Bleibt nur die Frage, ob der Mikro die compilierte
Datei auch direkt in den RAM laden , ausführen und die Ergebnisse
Anzeigen kann ohne sie dabei auf dem internen Speicher zwischenzulagern.
mfg Pyromane
Das geht. Aber seien wir mal ehrlich, C muss man sich für sowas nicht
antun. Ich hab LUA auf einen ARM7 mit FreeRTOS laufen:
http://www.lua.org
Das ist eine Scriptsprache, die einfach zu erweitern ist.
Nur wen du RAM als externen Speicher dranhängst und ihn soschaltest, das
du ihn sowohl als programm als auch als datenspeicher ansprechen kannst.
oder du baust neben deinem Bootlader und Compiler noch nen virtuellen
Prozessor (oder Interpreter) ein der den assemblierten (oder
tokenisierten) Code dann ausführt.
Hallo,
ein Arm kann Code aus dem Ram heraus ausführen ohne ihn im Flash zu
haben. Dir ist aber schon klar, dass ein Arm-Compiler nur schwierig auf
einen Arm draufzubekommen ist. Du musst dafür ja den Compiler als source
haben und auf die Zielplattform compilieren. Dann brauchen die Compiler
recht viele Funktionen, die normal ein Betriebssystem zur Verfügung
stellt. Da gehts beim Dateisystemtreiber los und hört mit den
Dispalyausgaben auf.
Deine Probleme werden im wesentlichen so aussehen:
-Der auf das Arm-Target compilierte Arm-Compiler passt nicht in den
Speicher deines Prozessors
-Du musst alle Betriebssystemfunktionen zur Verfügung stellen
-Du musst dafür sorgen, dass sich der Arm-Compiler überhaupt auf das
Target=Arm übersetzen lässt - und das sind viele source-Dateien, die
davon betroffen sind.
Wenn deine Programme so einfach sind, versuch es doch besser mit einem
Basic-Interpreter. Such bei Ebay nach der Basic-Stamp, die kann so
etwas. Aber eben nur in Basic und nicht in nativem Maschinencode,
sondern als Tokeninterpreter.
Was du machen kannst, ist es auf einem System zu versuchen, das bereits
ein Betriebssystemgerüst zur Verfügung stellt. Kennst du das ATNGW100
von Atmel? Da ist Linux vorinstalliert, da kannst über RS-232 ein
Terminal anschließen, muss man eben selber bauen, ev. mit AVR und
Dispaly, alternativ kann die CPU auch schon Displays ansteuern, auch in
sehr hoher Auflösung, dafür musst du dann wohl einen Treiber schreiben.
Ich könnt mir vorstellen, dass man den entsprechenden Compiler da drauf
bringt. Den sourcecode zu bekommen dürfte schwieriger sein, ich weiß
nicht, ob Atmel den rausgibt. Die Windows-EXE ist dafür jedenfalls
kostenlos, es gibt eine komplette IDE (AVR32-Studio) dazu.
Auf jeden Fall brauchst du zum compilieren sehr viel Arbeitsspeicher,
besonders dann, wenn der Compiler open source ist, kommerzielle Lösungen
sind da meistens sparsamer, die werden dir aber den Quellcode nicht
geben.
Grüße,
Peter
GCC etc. dürften tatsächlich zu groß sein und zu viel Speicher zum
kompilieren brauchen.
Für x86 gibt allerdings auch einen sehr kleinen und schnellen Compiler:
http://bellard.org/tcc/
Allerdings ist es wesentlich einfacher, was anderes als C zu nehmen,
wenn man den Compiler dafür selbst schreiben will.
Gutes Beispiel sind z.B. die diversen Oberon-Compiler.
https://www.oberon.ethz.ch/archives/languagearchive/compilers_new
tcc gibt es auch für ARM.
Ich habe ein C-Interpreter, der C-code compiliert/tokenisiert und dann
ausführt, aber eigentlich will ich den nicht gratis rausgeben.
Trotzdem kann ich sagen, daß sowas sehr kompakt sein kann und wenig
Speicher braucht.
Vor langer, langer Zeit gab es mal von Sharp einen Taschenrechner, da
war auch ein C-Compiler drin. Das Teil hatte eine Z-80 CPU. Die haben
das mit 64kByte RAM und 256kByte ROM gemacht.
Stephan.
Für den 6809 (einen der schicksten 8-Bit-Prozessoren überhaupt) gab es
mit "Introl-C" auch einen nativen C-Compiler.
Der lief unter anderem unter Flex und OS-9 (nein, nicht MacOS), auf
Maschinen mit weniger als 64 kByte RAM. Dieser Compiler verstand nur
"K&R-C", was aber kein Wunder ist, erschien er doch in den frühen 80ern,
also lange vor C89.
Es sollte also in der Tat möglich sein, auch einem µC einen nativen
C-Compiler beizuschnallen, hilfreich allerdings wäre das Vorhandensein
eines Betriebssystems mit Dateisystem. Der µC sollte keine
Harvard-Architektur aufweisen, da sonst das Ausführen von Code aus dem
RAM nur schwer realisierbar ist.
Eine eigene Frage?
Dieser Thread ist über 18 Jahre alt.
Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.