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

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