www.mikrocontroller.net

Forum: Compiler & IDEs Makefile für Erzeugung Datei " " ändern


Autor: Martin M. (martin69)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich habe ein Projekt von Roland Riegel von Seiner HP runter geladen. 
Entsprechende Änderungen (Prozessortyp in 128er geändert und 
Quarzfrequenz geändert) habe ich schon selber vorgenommen. Allerdings 
erzeugt das Makefile keine Datei mit der Endung "elf".

Ich benutze AVR Studio 4.11 und benötige diese Datei daher. Ich möchte 
nicht auf das aktuelle AVR-Studio unsteigen, weil ich mich an das alte 
gewöhnt habe und damit zufrieden bin.

Was für Einträge muß ich im Makefile machen, damit das Makefile eine 
entsprechende *.elf erzeugt?

Wäre nett, wenn mir einer die Datei ändern und als Anhang hier posten 
könnte.

Autor: Roland Riegel (roland) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Martin,

Übergebe in dem Makefile an avr-objcopy statt "-O ihex" einfach mal "-O 
elf32-avr" und ändere am Anfang des Makefile die Endung der 
Ausgabedatei.

Ich kenne das AVR-Studio zwar nicht und auch das ELF-Format ist mir bei 
AVRs noch nicht untergekommen, aber wenn Du das so brauchst...

Gruß,
Roland

PS: Ein wenig eigenständige Suche oder das Lesen der einschlägigen 
Man-Pages hätte Dich auch selbstständig weitergebracht. Was anderes habe 
ich auch nicht getan.

Autor: ... (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wozu doppelt gemoppelt und so kompliziert?
Das ELF-Format purzelt doch schon von ganz alleine aus dem Linker! Und 
avr-objcopy macht daraus dann das hex-Format.
Warum der Autor des Makefile der Datei allerdings die Endung 'out' 
verpasst hat weis ich auch nicht. Einfach in dem geposteten Makefile am 
Ende der 4. Zeile aus dem 'out' ein 'elf' machen.

CU

Autor: Martin M. (martin69)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Roland: Danke für die schnelle Antwort. Du meinst so:

OUT := $(NAME).elf

$(HEX): $(OUT)
  $(OBJCOPY) -R .eeprom -O elf32-avr $< $@


Bin gerade nicht an meinem Programmier-PC und kann es daher erst morgen 
testen.

Autor: Martin M. (martin69)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@...
Dann hätte ich es nur oben ändern müssen?
Wie gesagt, bin gerade nicht an meinem Programmier-PC und kann es daher 
leider nicht gleich testen.

Autor: Roland Riegel (roland) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ok, danke für die Korrektur.

Die Wahl von .out war eher willkürlich. Ich verwende das AVR-Studio 
nicht, und unter Linux arbeite ich mit Intel-Hex-Dateien, deshalb 
überhaupt die Umwandlung mit avr-objcopy.

Gruß,
Roland

Autor: ... (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nicht ganz :)
Nur die eine Zeile ändern:
OUT := $(NAME).elf
Die andere bleibt wie sie ist, also mit dem "-O ihex" darin. Sonst 
suchst Du anschließend vergeblich nach der hex-Datei zum Flashen :)

Autor: Martin M. (martin69)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
OK. Vielen Dank für die Hilfe! Bin mal gespannt, ob das Auslesen und 
beschreiben der SD-Karte mit der Software von Roland klappt...

Autor: ... (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Huch, da war ich wohl zu langsam.
Das ganze hat auch nicht direkt was mit dem AVRStudio zu tun. Das 
ELF-Format ist einfach das, was am Ende (nach dem linken) aus dem 
avr-gcc/WinAVR rauskommt. Egal ob unter Windows, Linux, BSD, <whatever>.
Das AVRStudio braucht die Datei nur, weil da auch die Debuginfos für den 
Debugger/Simulator mit drin sind. Unter Linux hättest Du mit dem GDB 
auch nicht viel Freude, wenn die Dir fehlen würden.

CU

Autor: Martin M. (martin69)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das geänderte Makefile hat funktioniert.

Allerdings habe ich nun noch wieder die Version von Ulrich Rading 
verwendet, um die SD-Karte auszulesen, nachdem ich den Hardwarefehler 
gefunden habe (die Version von Roland Riegel hab ich aufgrund der vielen 
Zeiger im Programm leider nicht so ganz geblickt - funktioniert hat sie 
aber prinzipiell schon).

Übrigens: Die Sache mit dem Spannungsteiler für die Signale hat bei mir 
die Signale extrem verschliffen. Hab die SPI-Taktfrequenz deutlich 
gedrosselt und dann war das Problem beseitigt.

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
... wrote:

> Warum der Autor des Makefile der Datei allerdings die Endung 'out'
> verpasst hat weis ich auch nicht.

Weil Windows nun mal nur glücklich wird, wenn die Dateien auch einen
Suffix haben.

Normalerweise wird die ausführbare Datei unter Unix beim Linken ohne
irgendeinen Suffix gespeichert, man compiliert also foo.c zu einem
foo.o, und linkt das dann zu einer Datei namens foo.  Da die für den
AVR enstehenden Dateien ohnehin nicht direkt ausführbar sind und
einer Nachbearbeitung bedürfen (avr-objcopy), und da Windows komplett
auf Dateinamensendungen basiert, hat man dem beim AVR-GCC mal
irgendwann einen Namen hinzu gegeben.  Da der Default-Name einer
ausführbaren Datei unter Unix »a.out« heißt, lag der Suffix .out hier
nahe.  Der Suffix .elf ist nicht minder Unfug, denn alle Objektdateien
sind im ELF-Format, auch die .o-Dateien, die als verschiebliche
Objekte zwischendrin entstehen.

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.