Wenn ich arm-none-eabi-objcopy -O binary add.elf add.bin
renne, scheint alles in Ordnung zu sein. Aber später, wenn ich es ausführe, ist ls -lh add.bin add.elf
dies die Ausgabe, die ich erhalten habe:
-rw-r - r-- 1 David David 2,6G 23. November 22:49 add.bin -rwxr-xr-x 1 david david 65K 23. November 22:40 add.elf
Dies ist eine riesige Datei. Aber wenn ich du -h add.bin
die Ausgabe starte, ist:
8,0K add.bin
Was passiert hier?
Edit: Ausgabe von arm-none-eabi -A -t -x add.bin
:
Warnung: 'add.bin' konnte nicht gefunden werden. Grund: Wert zu groß für definierten Datentyp
Ausgabe von arm-none-eabi -A -t -x add.elf
:
Abschnittsgröße Adr .text 0x2c 0x0 .data 0xc 0xa0000000 .ARM.attributes 0x14 0x0 Insgesamt 0x4c
Ausgabe von du -bh add.bin
:
2,6G add.bin
So habe ich es behoben:
Wenn ich das Programm mit dem Befehl verknüpfe, enthält arm-none-eabi-ld -Tld_script.lds -o add.elf add.o
die ld-Skriptdatei zunächst Folgendes ld_script.lds
:
ABSCHNITTE { . = 0x00000000; .text: { * (.text); }} . = 0xA0000000; / * RAM-Startadresse * / .Daten :{ * (.Daten); }} }}
Der obige Code wird von 0x00000000 bis 0xA0000000 mit 0s gefüllt. Dieser Fehler kann folgendermaßen behoben werden:
ABSCHNITTE { . = 0x00000000; .text: { * (.text); }} flash_sdata = .; / * Startet die Daten in Flash direkt nach dem Text * / . = 0xA0000000; / * RAM-Startadresse * / ram_sdata = .; / * AT gibt die Lastadresse an. von .data Abschnitt * / .data: AT (flash_sdata) { * (.Daten); }} ram_edata = .; / * Adresse des Datenendes im RAM * / data_size = ram_edata - ram_sdata; }}
Und dann habe ich in der Quelle ein Stück hinzugefügt, um die Daten von Flash in den RAM zu kopieren. Etwas wie das:
@ Daten in RAM kopieren. Start: ldr r0, = flash_sdata ldr r1, = ram_sdata ldr r2, = data_size Kopieren: ldrb r4, [r0], # 1 strb r4, [r1], # 1 subs r2, r2, # 1 bne Kopie
Wenn mein Englisch nicht zu genau ist, ist dies der Link, der mir hilft, das Problem zu beheben. (Und eine gute Seite zum Erlernen der eingebetteten ARM-Programmierung).
arm-none-eabi-size.exe -A -t -x <file>
.
du -bh add.bin
?