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
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.
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
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 ;)
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?
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.
> 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
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.
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 ;)
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
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
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.