Eine Frage an die GCC-Gurus: warum muß ich extra im Make-File den MCU-Typ definieren ? In Assembler kann man das bequem ins Include-File mit reinschreiben. Gibts denn da wirklich keinen Weg für den GCC ? Ansonsten ist ja immer die Gefahr, daß Include-File und MCU-Typ verschieden sind und man sich dann dumm und dämlich sucht, warums nicht läuft. Beim 8051 wars so schön einfach, der will garnicht wissen, was fürn Derivat ich nehme, d.h. das richtige Include-File nehmen und fertig. Noch ne Frage: Ich hab mich noch nie mit Make-Files rumquälen müssen. Ich habe für den 8051 eine Batch-Datei, die einfach alle *.C51-Files im Projektverzeichnis kompiliert und zusammenlinkt. Hat so eine Lösung schon mal einer für den GCC gefunden ? Oder muß ich umständlich immer für jedes neue Projekt ein neues Make-File erstellen ? Vielen Dank, Peter
Dass man den MC im Makefile angeben muss, hat selbstverständlich seinen Sinn! Der Kompiler und der Linker müssen schliesslich über die Speicher- und Registerkonfiguration des Prozessors informiert werden, für den sie den Code zusammenbauen. Eine Hochsprache ist schliesslich auch etwas anderes als Assembler! Es zwingt einen ja auch niemand, in einen gut dokumentierten Code einen Hinweis hineinzischreiben, für welchen MC er geschrieben wurde, was eigentlich bei einer guten Doku sowieso selbstverständlich sein sollte. Andere Compiler zwingen den Anwender deshalb, eine komplette Projektdatei anzulegen, so dass die verschiedenen Dateien untrennbar miteinander verbunden werden. Beim gcc bleibt dies dem Anwender überlassen, sinnvoll mit diesem Umstand umzugehen. Gruss, Peter
was haste denn mit den include files? die sind doch für alle derivate gleich! (bzw. der präprozessor included automatisch die richtige, wenn der MCU typ inner makefile gegeben ist). falls du es nicht wusstest: nicht <io2313.h> (oder was auch immer dein avr ist) includen, sondern einfach <io.h>
Vielen Dank, ist es aber auch möglich, die MCU Angabe auch im Quelltext zu machen oder geht das ausschließlich nur im Makefile ? Peter
Das muss notwendigerweise ins Makefile, weil Compiler und Linker entsprechende Parameter (z.B. -mmcu=xyz) übergeben werden. Wenn das nur im Sourcecode stehen würde, funktioniert die Systematik nicht. Man könnte eine Prozedur basteln, die diese Info aus dem Sourcecode herausnimmt und separat übergibt. Aber das wäre schon ein gewisser Aufwand. Wie ich bereits sagte, andere Compiler haben hierfür ihre Projekt-Dateien, die sozusagen eine Klammer um die ganzen übrigen zugehörigen Dateien bilden. Bei avrgcc liegt es in der Eigenverantwortung, die zueinander gehörenden Dateien entsprechend zu sortieren. Dafür bietet der avrgcc aber auch einiges an Möglichkeiten und Parametern mehr als die bekannten Compiler mit hausfrauenkompatibler Oberfläche, wie z.B. der CodeVision. Und was die Qualität des generierten Codes betrifft, spielt der avrgcc in der vordersten Liga, auch wenn einige Hersteller kostenpflichtiger Produkte oft krampfhaft versuchen, gegenteilige Gerüchte zu streuen. Man muss halt wissen, was man fahren will. Einen Ferrari mit hakeliger H-Schaltung und knallharter Kupplung oder einen Volkswagen mit Automatikgetriebe. Es ist für jeden Geschmack etwas dabei ;-) Gruss, Peter
Hallo Peter, da muß ich wohl doch immer in den Makefiles rumwuseln, was ich mir eigentlich ersparen wollte. Beim 8051 ist das doch einfacher. Dort gibt es sogenannte #pragma-Anweisungen, mit denen man auch aus dem Sourcefile heraus viele Compileroptionen setzen kann. Den CPU-Typ will der auch garnicht wissen, da es da kodemäßig keinerlei Unterschiede gibt. Peter
Hallo Leute (bin anfänger) ich habe keine Ahnung wo und wie ich den MCU eintragen kann? Ei zweite Frage: ich habe den avrgcc, wie lautet die MCU, danke
@Peter: Mit der folgenden Zeile im Batch- oder Makefile kannst du alle C-Dateien in einem Ordner kompilieren und linken: avr-gcc -Os -mmcu=atmega8 -Wall *.c
@Andreas, ich bin verblüfft ! Das scheint die ultimative Lösung zu sein. Anbei die Batch. Vielen Dank an Antara für das Hochholen des Threads. MCU ist das, was auf Deinem AVR-Chip draufsteht: z.B. at90s2313, atmega8 usw. Peter
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.