Unterschiede im Hex-file (AVR)

Gast #4894276
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.
Angehängte Dateien:
#4894286
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.
(Firma: EDF) #4894305
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
Gast #4894363
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.
#4894390
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.

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