wie MCU definieren ?

OP #5700
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
Gast #5701
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
Gast #5702
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>
Gast #5704
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
OP #5705
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren