Forum: Mikrocontroller und Digitale Elektronik Unterschiede im Hex-file (AVR)


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Gerhard (Gast)


Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Komische Sache....
Eigentlich habe ich nur ein bisschen Kosmetik betrieben (besser 
formatiert, Variablen umbenannt, ein paar Kommentare hinzugefügt). 
Eigentlich nichts, was den erzeugten code beeinflussen könnte. Kein 
Compilerupdate zwischendurch, gleiche Compilereinstellungen.

Spasseshalber habe ich das mal mit dem alten Hex-file/programmierten 
Chip verglichen und bekomme ne Fehlermeldung.
Alt: Hex-File in AVR-Studio geladen/Disassembler
Neu: listing der aktuellen Variante. Ich seh an Adresse 0x00b8 keinen 
Unterschied. Und die angemeckerten Werte 0x8b bzw 0x8e kann ich da auch 
nicht sehen.

von Stefan E. (sternst)


Bewertung
0 lesenswert
nicht lesenswert
Gerhard schrieb:
> Eigentlich habe ich nur ein bisschen Kosmetik betrieben (besser
> formatiert, Variablen umbenannt, ein paar Kommentare hinzugefügt).
> Eigentlich nichts, was den erzeugten code beeinflussen könnte.

Doch. Das Umbenennen von Variablen kann dazu führen, dass der Linker sie 
in einer anderen Reihenfolge anordnet, womit sich dann auch der Code 
ändert.

Gerhard schrieb:
> Ich seh an Adresse 0x00b8 keinen
> Unterschied. Und die angemeckerten Werte 0x8b bzw 0x8e kann ich da auch
> nicht sehen.

Ich würde mal vermuten, dass ein Hex-Compare auf Byte-Basis arbeitet. 
Die Adressen im Hex-Dump sind aber Word-Adressen. Du hast also 
vermutlich an der falschen Stelle geschaut.

von Marc V. (Firma: Vescomp) (logarithmus)


Bewertung
0 lesenswert
nicht lesenswert
Gerhard schrieb:
> Eigentlich nichts, was den erzeugten code beeinflussen könnte. Kein
> Compilerupdate zwischendurch, gleiche Compilereinstellungen.

 Ahem.
 Vergleiche mal die Adresse 0x00B7.
 Da ist schon mal mehr Code dazwischen.

von D. F. (Firma: EDF) (derdan)


Bewertung
0 lesenswert
nicht lesenswert
Du könntest auch mit deiner Versionverwaltung den code solange Richtung 
Ursprung revertieren bis eindeutig ist, durch welche Änderung sich dein 
Hex File beinflustt hat.

Den Vergleich könntest du ja durch direktes Verglichen des vorher - 
nacher Hexfiles durchführen

von Gerhard (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Stefan E. schrieb:
> Ich würde mal vermuten, dass ein Hex-Compare auf Byte-Basis arbeitet.
> Die Adressen im Hex-Dump sind aber Word-Adressen. Du hast also
> vermutlich an der falschen Stelle geschaut.

Ja, supi :-). Die erste Unterschied ist bei 0x005C (rjmp _main).

Und im nachhinein auch den tatsächlichen Unterschied gefunden. Eine 
unbenutzte Variable hatte ich beim Aufräumen rausgeschmissen. Ich dachte 
eigentlich, dass macht der Compiler/linker alleine?

Tut er aber nicht, wenn die auch initialisiert wird.
uint8_t hysterese;   //fliegt rückstandslos raus
uint8_t hysterese=0;  //bleibt im Code, auch wenn hysterese nicht 
referenziert wird.

von Amateur (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Einfach Bytes verändern ist nicht.

Du musst die geänderte Zeile neu aufbauen. Wichtig, in diesem 
Zusammenhang, ist die Prüfsumme am Ende JEDER Zeile;)

von Johann L. (gjlayde) Benutzerseite


Bewertung
0 lesenswert
nicht lesenswert
Gerhard schrieb:
> uint8_t hysterese=0;  //bleibt im Code, auch wenn hysterese nicht
> referenziert wird.

Ist doch ok :-)

Nichts schreibt vor, dass nicht-verwendete Variablen ebtfernt werden 
müssen... avr-gcc macht das zwar, aber offenbar werden andere Tool 
verwendet.

: Bearbeitet durch User
von Jim M. (turboj)


Bewertung
0 lesenswert
nicht lesenswert
Gerhard schrieb:
> Und im nachhinein auch den tatsächlichen Unterschied gefunden. Eine
> unbenutzte Variable hatte ich beim Aufräumen rausgeschmissen. Ich dachte
> eigentlich, dass macht der Compiler/linker alleine?

Macht der Linker nur mit --gc-sections. Und das benötigt dann 
-fdata-sections beim Compiler für Daten und -ffunction-sections für 
Funktionen.

von Johann L. (gjlayde) Benutzerseite


Bewertung
0 lesenswert
nicht lesenswert
Jim M. schrieb:
> Macht der Linker nur mit --gc-sections. Und das benötigt dann
> -fdata-sections beim Compiler für Daten und -ffunction-sections für
> Funktionen.

Nur wenn GNU-Tools verwendet werden, was offensichtlich nicht der Fall 
ist.

: Bearbeitet durch User

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]
  • [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.