mikrocontroller.net

Forum: Compiler & IDEs COFF Datei mit Codeblocks (WINAVR) erzeugen


Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

wie kann ich die COFF Datei mit Codeblocks und WINAVR erzeugen?

Ich bekomme nur eine Hex Datei aber damit kann das AVR-Studio nicht so 
viel anfangen.


Viele Grüsse, Peter

Autor: ... (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du brauchst die .elf Datei. Das AVRStudio will aber sowieso dwarf2. Beim 
gcc ist die -g Option dafür zuständig. Keine Ahnung wo man die in 
Codeblocks setzen kann/muß.

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
-g ist gesetzt aber es kommt nicht raus.

Hoffentlich kann mir hier jemand helfen.
Ich werde aber zur Sicherheit mal ein Makefile bauen.

Peter

Autor: ... (Gast)
Datum:

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

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Code::Blocks bastelt sich das was eigenes.

Der Fehler sitzt aber zwischen den Ohren.

Die ELF-Datei ist die Debugdatei und nicht die AVR-Studio 
Brenner-ELF-Datei.

Blöde namens Vergabe.

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

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

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Man lernt immer wieder dazu.

Danke, Peter

Autor: akurtj (Gast)
Datum:

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

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

Bewertung
0 lesenswert
nicht lesenswert
akurtj schrieb:
> In die Pre/post build steps z.B. folgendes eintragen:

Und warum?  Hast du dir den Rest des Threads durchgelesen?  Das olle
AVR-COFF wird nämlich gar nicht mehr benötigt...

Autor: akurtj (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Weil Peter danach gefragt hat, wie er es in C::B 'einbaut'.
Ob eine coff-Datei sinnvoll ist, ist eine andere Frage... die Du ja 
umfassend beantwortet hast.

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.