mikrocontroller.net

Forum: Compiler & IDEs hex-file über 8MB groß ?!


Autor: Stefan Seegel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Tach zusammen.

Ich habe heut mal wieder ein Projekt ausgegraben an dem ich schon seit
einigen Monaten nicht mehr gearbeitet habe (Software für meine
Heizungssteuerung). Beim Flashen (Fehlermeldung) ist mir aufgefallen,
dass die hex-Datei (binary format) über 8MB groß ist. Bei einem Blick
in die hex Datei mit einem HexEditor konnte ich feststellen dass
offenbar am Anfang der Datei die richtigen Daten stehen, und danach
(nach ca. 13kB) nur noch 0x00 drin steht. Zuerst dachte ich dass es
irgendwie den avr.objcopy zersemmelt hat, aber eine Neuinstallation von
WinAVR (neuste Version) brauchte auch nichts, ausserdem tritt das
Problem nur bei diesem einen Projekt auf. Noch etwas ist mir
aufgefallen: Erzeuge ich die hex-Datei im ihex Format und öffne selbige
mit Ponyprog, wird die Dateinicht als ihex interpretiert, sprich die
eigentlichen Flashdaten sehen aus wie der Inhalt der ihex Datei. Öffne
ich andere (ihex) hex-Dateien interpretiert das Ponyprog immer
automatisch.

Hat jemand eine Idee ?

Gruß
Stefan

Hier noch die Ausgabe von AVRSIZE:

Size after:
heizctrl.elf  :
section            size      addr
.text             13226         0
.data                42   8388704
.bss                280   8388746
.noinit               0   8389026
.eeprom              14   8454144
.stab               876         0
.stabstr            132         0
.debug_aranges      300         0
.debug_pubnames    2579         0
.debug_info       13754         0
.debug_abbrev      3737         0
.debug_line       10258         0
.debug_str         3747         0
.eepom                1   8389026
.debug_ranges        12     13226
Total             48958

Autor: Μαtthias W. (matthias) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

die Ausgabe von avr-size sieht eigentlich gut aus. Wie sieht denn dein
Aufruf von avr-objcopy aus der die HEX-Datei erstellt?

Matthias

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

Bewertung
0 lesenswert
nicht lesenswert
Hat neulich schon jemand berichtet, scheint ein Bug in
den GNU binutils zu sein -- vielleicht getriggert durch die
DWARF-2-Debuginformationen.  Bislang ist noch kein Muster
bekannt, mit dem das reproduzierbar erfolgt, daher ist es
wohl nicht einfach, einen gescheiten Bugreport für die
binutils zu schreiben.

Musst du denn unbedingt binary ausgeben?  ihex und srec scheinen
das Problem ja nicht zu haben.

Autor: Stefan Seegel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Moin,

nein, ich muss nicht unbedingt binary ausgeben (zumindest nicht bei
diesem Projekt, ein anderes hat einen einen MMC-Bootloader, da muss es
binary sein). Aber selbst im ihex-File stimmt was nicht, wie in meinem
ersten Post schon angedeutet: PonyProg interpretiert die Datei nicht
als  ihex, sondern tut so als ob in der Datei bin-Daten drin wären, die
dann natürlich viel zu groß und vor allem sinnentleert sind.
Auch AVRISP im AvrStudio meckert (bei ihex und binary), dass die Datei
zu groß ist. Ich sehe also im Moment keine Möglichkeit mein Compilat in
den AVR zu bekommen, was gerade relativ wichtig wäre (betrifft die
automatische Umschaltung auf Ölbrenner wenn der Holzvergaser leer
ist).
Ich werd mal schaun ob's was bringt mit anderen Debug-Informationen zu
kompilieren.

Gruß
Stefan

Autor: Μαtthias W. (matthias) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

poste doch einfach mal das .elf und das Makefile. Dann können anderen
auch mal prüfen.

Matthias

Autor: Stefan Seegel (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
So, ich noch mal hier. Hier kommt zunächst das Makefile, das hat mir
AVRStudio mit GCC-Plugin zusammengebaut (aber auch gleiches Ergebniss
wie makefile von MFile)

Autor: Stefan Seegel (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
...und hier die elf-Datei...

Autor: Stefan Seegel (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
...und hier noch das "kaputte" Hex file im ihex-Format. Im Binary
Format wollte ich's hier nicht einspielen, sind ja über 8 MB !

Ach ja, das -gdwarf hab ich bei den c-flags rausgenommen, hat aber
keinen Unterschied gemacht...

Stefan

Autor: peter dannegger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
3. Zeile von hinten ist ein extended address record (04), der auf die
Adresse 0x00800000 plaziert.

Diesen Recordtyp kennt auch kaum ein Programmer, da er nur für Adressen
>24 Bit benötigt wird, also für Chips >16MB.

Vermutlich versucht dort jemand die Fuse-Settings abzulegen und hat
einen Spezialprogrammer, der den Record 04 dahingehend interpretiert.

Ich kenne mich mit Makefiles nicht aus, da muß also ein anderer
nachsehen, wo diese Schweinerei passiert.


Peter

Autor: Μαtthias W. (matthias) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

versuch mal

avr-objcopy -O binary -R .eeprom -R .eepom heizung.elf heizung.bin

Irgendwo in deinem Source wird eine Variable die ins EEPROM sollte
(section eeprom) in .eepom (man beachte das fehlende 'r') verlagert
und diese Section wird dann von avr-objcopy natürlich mit ausgegeben.

Durchsuch deinen Source also mal nach ".eepom" und du solltest das
Problem finden.

Matthias

Autor: Stefan Seegel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
TREFFER!

Matthias, du bist der Gott :

unsigned char eoel_mode _attribute_ ((section (".eepom"))) = 2;

Da war der Hund begraben... schnell ein 'r' eingebaut und alles ist
wieder gut. So, nun aber schnell in den Keller und das update
einspielen, der Winter will einfach nicht gehen...

1000 Dank,
Stefan

Autor: Μαtthias W. (matthias) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

Danke, aber das ist dann wirklich zu viel der Ehre ;-)
Ich war nur der schnellste.

Matthias

Autor: .... (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Puh, hier riechts nach Eigenlob...

Autor: Stefan Seegel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hat er ja auch verdient ;-)

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.