2012-11-15 19 views
8

Ich habe immer nur mit AVRs und MSP430s gearbeitet, aber das gilt für beide. Nach dem Kompilieren und dem statischen Verknüpfen ist meine endgültige ELF-Binärdatei etwa 208kB und die Intel-Hex-Binärdatei ist etwa 41kB. AVRDUDE sagt mir, dass es ungefähr 18kB hochlädt. Was ist hier eigentlich los?Warum ist die hochgeladene Binärdatei so viel kleiner als die tatsächliche Größe?

+0

versuchen Sie, eine .bin-Datei zu erstellen ... die auch nicht die richtige Größe hat, aber ein besserer Indikator sein kann. Das .elf-Format hat viel mehr Zeug als nur die Bytes, die geladen werden. Die .hex-Datei hat einige Extras und ist in ASCII, so dass Sie doppelt so viele Bytes direkt aus dem Gate haben und dann das Extra hinzufügen. Diese Dateiformate sind alle in Wikipedia und anderen Orten dokumentiert –

+0

ist es nicht, dass die Binärdatei kleiner als die Datei ist, dass die Dateien größer als die Binärdatei sind. –

Antwort

10

mein letztes ELF-Binaries ist um 208KB

Ja, weil ELF-Code nicht roh Maschine ist. Es ist ein universelles ausführbares Format, das Verschiebungsinformationen, dynamische Ladeinformationen, verschiedene Abschnitte für Nur-Lese-Daten, beschreibbare Daten und Code usw. aufweist. Die meisten davon sind auf einem Mikrocontroller irrelevant, da es kein OS, keine dynamischen Ladeeinrichtungen, hat Die meisten zusätzlichen Informationen können entfernt werden.

die Intel Hex-Binärdatei ist etwa 41kB. AVRDUDE sagt mir, dass es ungefähr 18kB hochlädt.

Zwei Gründe. Eine, eine Intel-Hex-Datei enthält Prüfsummen am Ende jeder Zeile. Wenn Sie diese mit einer angemessenen durchschnittlichen Zeilenlänge schneiden, können Sie erwarten, dass die Datei um einige Prozente schrumpft, zum Beispiel auf 36kB. Dann gibt es einen Grund, warum Intel Hex-Dateien "Hex" -Dateien heißen. Sie enthalten keine rohen Binärdaten, sondern rohe Binärdaten in hexadezimaler Form - i. e. Ein reelles Byte wird mit zwei Bytes codiert. Wenn AVRdude also den Code hochlädt, konvertiert er ihn in eine rohe Binärdatei (das kann der AVR-Prozessor ausführen), und dann wird die Datengröße erneut um 50% verringert.

+2

Die ELF-Binärdatei könnte auch Symbole enthalten. –

+0

@MichaelBurr Ja, das stimmt. –

+0

Ehrfürchtig. Klingt gut für mich, danke! – Andrew

0

Der Objektcode enthält zusätzliche Metadaten, einschließlich der Symboltabelle und Debuggerinformationen. Die meisten dieser Daten können normalerweise durch Compiler und/oder Linker-Option oder durch das Strip Dienstprogramm entfernt werden, wenn Sie eine GNU-Toolchain verwenden.

Eine hexadezimale Datei verwendet 2 hexadezimale Zeichen, um ein einzelnes Byte darzustellen, zuzüglich des Datensatz-Overheads, also immer etwas mehr als die doppelte Länge der Binärdatei.

Verwandte Themen