Forum: Compiler & IDEs wie MCU definieren ?


von Peter D. (peda)


Lesenswert?

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

von Peter (Gast)


Lesenswert?

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

von Jonas Diemer (Gast)


Lesenswert?

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>

von Peter D. (peda)


Lesenswert?

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

von Peter (Gast)


Lesenswert?

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

von Peter D. (peda)


Lesenswert?

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

von Antara (Gast)


Lesenswert?

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

von Andreas S. (andreas) (Admin) Benutzerseite


Lesenswert?

@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

von Peter D. (peda)


Angehängte Dateien:

Lesenswert?

@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
Noch kein Account? Hier anmelden.