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


von Gerhard (Gast)


Angehängte Dateien:

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)


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)


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)


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)


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)


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


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)


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


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
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.