Ich versuche, die von AVR Studio generierte Hex-Datei zu verstehen. Ich habe einen Code in Assembler geschrieben. Der Code lautet wie folgt:
#include "m328pdef.inc"
.org 33
rjmp reset
reset:
add r16,r17
main:
out DDRB,r16
rjmp main
Das .org
ist, meinen Code in den Speicherplatz 33 fest zu codieren. Dann habe ich die generierte Hex-Datei überprüft. Das ist wie folgt:
:020000020000FC
:0800420000C0010F04B9FECF5C
:00000001FF
Die 2. Zeile sollte von Interesse sein. Die Adresse, wo dies gespeichert ist, ist 0042. Wieso? Können Sie bitte mein Verständnis klären.
Dies ist eine Intel-Hex-Datei im Standardformat, die von Linkern vieler Hersteller verwendet wird.
Das erste Zeichen ist immer ':'
Die nächsten zwei Hexadezimalziffern sind die Byteanzahl in zweistelligen Paaren im Datenfeld der Zeile. Die erste Zeile hat also zwei Datenbytes, die nächsten acht Bytes und die letzten null Bytes.
Die nächsten vier Hexadezimalziffern sind die Adresse in Bytes. Olin hat bereits erwähnt, warum die Startadresse von 33 (0x21) als 0042 angezeigt wird.
Die nächsten beiden Hexadezimalziffern sind der Datensatztyp. 02 ist ein erweiterter Adresstyp, mit dem Adressen über die 64-KB-Grenze des ursprünglichen Formats hinaus erweitert werden können. Aber das Datenfeld nach der 02 in der ersten Zeile ist 0000, also gibt es in diesem Fall wirklich keine Erweiterung.
Die letzten beiden Hex-Ziffern sind die Prüfsumme (zur Berechnung siehe Wikipedia-Artikel).
In der zweiten Zeile sagt der 00-Datensatz, dass es ein Adressfeld (z. B. 0042) vor dem Datensatztyp und die acht Datenbytes nach dem Datensatztyp (00, C0, ... bis CF) geben wird.
Die letzte Zeile mit der Satzart 01 ist ein Satzende.
Ich kenne keine AVR-Binärdatei, daher ist dies eine Vermutung, obwohl sie sehr gut zu passen scheint.
Sie haben ihm gesagt, dass er Ihren Code bei 33 eingeben soll, was 21 Uhr ist. Adressen werden wahrscheinlich in der HEX-Datei verdoppelt, weil das adressierbare Wort breiter als 8 Bit ist, also 42h ergibt. Dies alles sollte natürlich im Linker- oder Assembler-Handbuch gut dokumentiert sein.
Paul Sullivan
trosley
Olin Lathrop
trosley