COFF Datei mit Codeblocks (WINAVR) erzeugen

Gast #1708144
Lesenswert?
• ▲
▼
Richtiger wäre auch -gdwarf-2
Trotzdem erzeugt WinAVR normalerweise ein .elf File, aus welchem 
anschließend mittels avr-objcopy das .hex erzeugt wird.
Benutzt Du ein eigenes Makefile oder bastelt Codeblocks sich da selbst 
was zusammen?
Wenn Du ein eigenes baust, dann benutze am besten mfile (ist bei WinAVR 
dabei).
Moderator Persönliche Seite #1708171
Lesenswert?
• ▲
▼
Peter schrieb:
> Blöde namens Vergabe.

Nö, bloß nicht richtig verstanden: ELF ist das Objektformat, das
vom GCC native benutzt wird.  Das wird sowohl benutzt für verschieb-
liche Objektmodule (compilierter und assemblierter Code, der noch
gelinkt werden muss) als auch für das fertig gelinkte Objekt.  In
der normalen Unix-Benamung (aus der der GCC stammt), würde man der
fertigen ELF-Datei gar keinen Dateinamenssuffix geben, da sie ja
letztlich ein ausführbares Kommando darstellt (das vom Betriebssystem
direkt geladen werden kann).  Da Windows nicht so sehr glücklich ist,
wenn es nicht seine von CP/M stammenden drei Buchstaben als Datei-
endung sieht, hat es sich im embedded-Bereich eingebürgert, dem
Ergebnis des Linkers ein .elf anzuhängen.

Wenn du beim Compilieren Debug-Informationen erzeugt hast (und diese
nicht später entfernen lassen hast), dann enthält die fertig gelinkte
ELF-Datei auch die kompletten Debuginformationen.  Da sie zugleich
aber auch alle Informationen enthält, die man zum Laden des Controllers
benötigt, bietet AVR Studio mittlerweile an, dass man diese ELF-Datei
auch direkt zum Befüllen des AVRs benutzen kann.  Damit spart man sich
den Umweg, die Ladedaten erst einmal mittels avr-objcopy aus der
ELF-Datei zu extrahieren, nur um sie anschließend dem Programmier-
werkzeug zum Fraß vorzuwerfen.

Technisch gesehen ist diese fertig gelinkte (und damit auf eine
feste Ladeadresse gebundene) ELF-Datei also sowohl die Debug-Datei
als auch die Lade-Datei.
Gast #1708934
Lesenswert?
• ▲
▼
In die Pre/post build steps z.B. folgendes eintragen:

cmd /c "avr-objdump -h -S $(TARGET_OUTPUT_FILE) > 
${TARGET_OUTPUT_DIR}$(TARGET_OUTPUT_BASENAME).lss"
avr-objcopy --debugging --change-section-address .data-0x800000 
--change-section-address .bss-0x800000 --change-section-address 
.noinit-0x800000 --change-section-address .eeprom-0x810000 -O 
coff-ext-avr $(TARGET_OUTPUT_FILE) 
${TARGET_OUTPUT_DIR}$(TARGET_OUTPUT_BASENAME).cof
avr-objcopy -O ihex -R .eeprom -R .eesafe $(TARGET_OUTPUT_FILE) 
${TARGET_OUTPUT_DIR}$(TARGET_OUTPUT_BASENAME).hex
avr-objcopy --no-change-warnings -j .eeprom 
--set-section-flags=.eeprom="alloc,load" --change-section-lma .eeprom=0 
-O ihex $(TARGET_OUTPUT_FILE) 
${TARGET_OUTPUT_DIR}$(TARGET_OUTPUT_BASENAME).eep
avr-size --mcu=atmega162 --format=avr $(TARGET_OUTPUT_FILE)

Gruß,
    Kurt

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.