Forum: Mikrocontroller und Digitale Elektronik Compiler schreiben


von Ampfing (Gast)


Lesenswert?

Hallo zusammen,

mal angenommen ich haette einen Microcontroller, dessen Assemblerbefehle 
ich kenne. Allerdings ist der C-Compiler nicht frei verfuegbar und 
ziemlich teuer.
Jetzt bin ich auf die Idee gekommen, ich koennte ja meinen eigenen 
Compiler schreiben, um den Controller nicht nur in Assembler sondern 
auch in C programmieren zu koennen.
Da man das Rad nicht unbedingt jedesmal neu erfinden muss waere doch 
eine Moeglichkeit einen Freeware-Compiler wie beispielsweise den GCC als 
Vorlage zu nehmen und 'nur' die Optimierungs- und Assemblierungsphase 
durch meine eigene zu ersetzen, oder? Dann braeuchte ich mir 
beispielsweise keine Gedanken ueber Parsing etc. von C zu machen, 
sondern koennte direkt auf die Tokens, die der GCC verwendet 
zurueckgreifen.
Funktioniert das grundsaetzlich, oder uebersehe ich dabei etwas?

Bitte keine Antworten a la "Wieso willst Du den Controller in C 
programmieren, nimm doch Assembler". Ich will es einfach (zumindest wenn 
es sich mit vertretbarem Aufwand realisieren laesst) :-)

Danke schonmal vorab fuer Antworten und viele Gruesse

von Andreas K. (a-k)


Lesenswert?

Ampfing wrote:

> Funktioniert das grundsaetzlich, oder uebersehe ich dabei etwas?

Ja, das geht. Haben andere ja auch schon so gemacht. Wird etwas 
leichter, wenn die Maschine registerorientiert ist, denn dafür ist GCC 
gebaut, aber auch Akkumulatorarchitekturen wie 68x12 hat man schon in 
GCC reingewürgt.

SDCC könnte als Basis evtl. einfacher sein.

von Micha (Gast)


Lesenswert?

Der GCC ist für so was "ideal" da er genau für so was vorbereitet ist 
und Du nur das so genannte "Backend" schreiben müstest. Das "Frontend", 
sprich Parsing, Code-baum und Teile der Optimierung sind für alle 
Targets gleich. Das entsprechende Backend übersetzt dann eine Art 
intermediär-Code in die Anweisungen des Ziel-µCs. Allerdings habe ich 
keine Ahnung, wie komplex die Programierung eines eigenen Backends ist.

http://archiv.tu-chemnitz.de/pub/2004/0107/index.html
http://en.wikipedia.org/wiki/GNU_Compiler_Collection

von Michael G. (linuxgeek) Benutzerseite


Lesenswert?

Hast du den entsprechenden Hintergrund? Vorlesungen in Theoretischer 
Informatik und Compilerbau belegt und auch genug Kenntnisse ueber die 
Architektur? Hast Du Dich in GCC soweit eingearbeitet? Ansonsten kannst 
das mal getrost wieder vergessen ;)

von Andreas S. (andreas) (Admin) Benutzerseite


Lesenswert?

Theoretische Informatik und Compilerbau braucht man nicht um GCC 
anzupassen; aber es ist viel Arbeit, und die Binutils wollen ja auch 
noch angepasst werden.

Um welchen Controller geht es denn?

von Andreas K. (a-k)


Lesenswert?

Michael G. wrote:

> Hast du den entsprechenden Hintergrund? Vorlesungen in Theoretischer
> Informatik und Compilerbau belegt

Nützlich, aber für Portierung von GCC oder SDCC auf eine andere 
Zielarchitektur nicht unbedingt nötig.

von Olaf (Gast)


Lesenswert?

> Nützlich, aber für Portierung von GCC oder SDCC auf eine andere
> Zielarchitektur nicht unbedingt nötig.

Das sehe ich auch so. Vor allem wird man fast immer eine CPU finden die
der bisher vom GCC noch nicht unterstuetzten CPU sehr aehnlich ist, so 
kann man dann da auch noch viel abschreiben oder wenigstens den groben 
Aufbau uebernehmen.

Olaf

von Rolf Magnus (Gast)


Lesenswert?

Die Frage klingt so ein bisschen wie: "Ich würde gerne Auto fahren, aber 
Autos sind so teuer. Jetzt bin ich auf die Idee gekommen, mir einfach 
schnell selbst eins zu entwerfen und zu bauen."
Auf GCC-Basis kannst du dir natürlich einen Riesenbatzen Arbeit sparen, 
aber es bleibt dann doch noch einiges übrig. Insbesondere muß man viel 
über die GCC-Interna wissen. Wenn du sehen willst, wieviel Arbeit es ist 
und wieviel du wissen mußt, kannst du dir mal die GCC-Quellen 
runterladen und die Implementierung eines Target (avr düfte ein recht 
einfaches sein) anschauen und versuchen zu verstehen. Die Targets sind 
im GCC-Sourcetree im Unterverzeichnis gcc/config zu finden. Ich will 
nicht sagen, es sei nicht möglich (wie schon erwähnt wurde, haben andere 
das auch schon gemacht), aber es ist eben doch ziemlich viel, was man 
lernen muß, vor allem, wenn man sich vorher noch nie mit Compilerbau 
beschäftigt hat.

> Bitte keine Antworten a la "Wieso willst Du den Controller in C
> programmieren, nimm doch Assembler". Ich will es einfach (zumindest
> wenn es sich mit vertretbarem Aufwand realisieren laesst)

Kommt darauf an, wieviel Aufwand für dich vertretbar ist. Die 
Programmierung des Controllers in Assembler ist möglicherweise deutlich 
schneller und einfacher.

von Michael G. (linuxgeek) Benutzerseite


Lesenswert?

Olaf wrote:
>> Nützlich, aber für Portierung von GCC oder SDCC auf eine andere
>> Zielarchitektur nicht unbedingt nötig.
>
> Das sehe ich auch so. Vor allem wird man fast immer eine CPU finden die
> der bisher vom GCC noch nicht unterstuetzten CPU sehr aehnlich ist, so
> kann man dann da auch noch viel abschreiben oder wenigstens den groben
> Aufbau uebernehmen.
>
> Olaf

Ohne tiefe Kenntnisse von der Materie macht sowas allerdings keinen 
Sinn... und den internen Aufbau und die Arbeitsweise von GCC muss man 
ebenfalls kennen. Ich hoffe soweit kann man mir folgen ;)

von Oliver (Gast)


Lesenswert?

Un so richtig Spaß macht C ohne eine passende libc auch nicht - aber 
wenn der gcc erst einmal angepasst ist, schafft man das auch noch.

Oliver

von Ampfing (Gast)


Lesenswert?

Hallo alle,

wow mit so viel Resonanz haette ich nicht gerechnet muss ich gestehen.
Der Reihe nach:

@ Micha
Vielen Dank fuer die Links, hab den Inhalt bis jetzt natuerlich nur 
ueberflogen, hoert sich aber sehr interessant an!

@ all
Nachdem es leider keine Vorlesung Compilerbau bei uns gab hab ich sie 
auch nicht besucht...
Es ging aber auch erstmal nur grundsaetzlich darum, ob ich in meiner 
einfachen Denke einen groben Fehler drin habe oder ob ich schonmal auf 
dem richtigen Weg bin.
Leider wurde mir gerade auch schon mitgeteilt, dass ich ab morgen wieder 
an einem anderen Projekt arbeiten darf. Da sich das ja nicht innerhalb 
eines Tages erledigen laesst mit dem Compiler (was mir durchaus klar und 
bewusst ist, mein Zeithorizont ging eher so gegen halbes Jahr bis Jahr) 
muss das erstmal warten. Aber ich weiss zumindest, dass ich auf einem 
gangbaren Weg bin und werde mich nochmal melden, wenn ich naeheres zum 
Zielsystem weiss und das neue Projekt angelaufen ist - der Erfahrung 
nach tendieren die Projekte gerade am Anfang dazu sehr zeitintensiv zu 
sein...

DANKE fuer jede Antwort, sie hat mir sehr geholfen und mir Mut gemacht. 
Und wie gesagt, ich weiss auch, dass das sicher kein Spaziergang wird, 
aber das ist ja auch nicht das Ziel.

Schoene Gruesse

von Michael König (Gast)


Lesenswert?

Ein C-Compiler ist eine ziemlich komplexe Software, deswegen kann man 
ohne sehr gute Grundkenntnisse so ein Projekt fast nicht schaffen. Eine 
Alternative wären hier bestehende Compiler, die sich vergleichsweise 
leicht an andere Architekturen anpassen lassen.

Zum einen wäre da der GCC, den schon einige genannt haben, aber der 
erscheint mir für so einen Zweck fast schon zu komplex.

Für 8-Bitter wäre eventuell SDCC interessant:
http://sdcc.sourceforge.net/

Ebenfalls nicht schlecht ist LCC:
http://www.cs.princeton.edu/software/lcc/

LCC hat den Vorteil, daß es dazu ein Buch gibt, wodurch man einen 
besseren Einblick in den Compiler bekommt, was bei GCC und SDCC 
wahrscheinlich etwas schwieriger ist.
LCC hat außerdem den Vorteil, daß Scanner und Parser handcodiert (d.h. 
nicht durch Lex und Yacc generiert) sind, wodurch dieser Teil des 
Compilers sehr effizient ist und die Fehlermeldungen sehr gut sind.
Die Nachteile will ich auch nicht verschweigen:
- Die globale Codeoptimierung fehlt, d.h. der erzeugte Code ist nicht 
ganz so gut.
- Es fehlt ein Präprozessor, aber die meisten Portierungen nehmen 
einfach den vom GCC oder den von K&R.
- Es fehlen logischerweise noch Codebibliotheken, aber das ist 
eigentlich bei den anderen Compilern das gleiche Problem.

von Ralph (Gast)


Lesenswert?

Nur mal so interessehalber, Welcher Mikrocontroller soll es denn sein ?

Bei dem zu erwartenten Aufwand, wird es wahrschienlch das sinnvollste 
sein , einen anderen Mikrocontroller auszuwählen, für den freie Software 
verfügbar ist.

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.