www.mikrocontroller.net

Forum: Compiler & IDEs wie MCU definieren ?


Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Jonas Diemer (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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>

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Antara (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Andreas Schwarz (andreas) (Admin) Benutzerseite Flattr this
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Peter Dannegger (peda)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.