Forum: Mikrocontroller und Digitale Elektronik C-Compiler ->auf<- einem Mikrocontroller


von Pyromane (Gast)


Lesenswert?

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

von Bri (Gast)


Lesenswert?

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.

von Bereits F. (Firma: D.ade) (bereitsfort)


Lesenswert?

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.

von Peter Diener (Gast)


Lesenswert?

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

von Arc N. (arc)


Lesenswert?

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

von chris (Gast)


Lesenswert?

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.

von Gast (Gast)


Lesenswert?

Kennst du den TI 89 ? Das ist ein graphischer Taschenrechner. Für den 
kannst du dir einen C Compiler runterladen. evt. kannst du damit was 
anfangen..

von Stephan (Gast)


Lesenswert?

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.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

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.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Peter Diener wrote:

> Den sourcecode zu bekommen dürfte schwieriger sein, ich weiß
> nicht, ob Atmel den rausgibt.

Klar, ist doch ein GCC.

von Olaf (Gast)


Lesenswert?

Hier noch eine alte Kamelle. :-)

http://en.wikipedia.org/wiki/BDS_C

Und es gibt sogar den Source....

Olaf

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.