Hallo Forum,
nach 3 Stunden suchen frag ich jetzt mal in die Runde.
Ich habe eine 10kB Binärdatei, die ich zusammen mit meinem dem
restlichen Code ins Flash meines mega324P legen und über die Program
Space Utilities (pgmspace.h) stückweise laden will. Das ganze ist ein
Array von Datensätzen um meine AVR-Klapparatur zu parametrieren.
Im ersten Schritt habe ich mir aus meiner 10k großen Datei ein Objekt
generiert:
1 | avr-objcopy -I binary -O elf32-avr -B avr:5 cmdtable.bin cmdtable.o
|
Leider landet das Ganze erst mal im .data Segment:
1 | avr-objdump -h cmdtable.o
|
2 |
|
3 | cmdtable.o: file format elf32-avr
|
4 |
|
5 | Sections:
|
6 | Idx Name Size VMA LMA File off Algn
|
7 | 0 .data 00002710 00000000 00000000 00000034 2**0
|
8 | CONTENTS, ALLOC, LOAD, DATA
|
Also nochmal mit --rename-section:
1 | avr-objcopy -I binary --rename-section .data=.progmem.data,contents,alloc,load,readonly,data -O elf32-avr -B avr:5 cmdtable.bin cmdtable.o
|
2 |
|
3 | avr-objdump -h cmdtable.o
|
4 |
|
5 | cmdtable.o: file format elf32-avr
|
6 |
|
7 | Sections:
|
8 | Idx Name Size VMA LMA File off Algn
|
9 | 0 .progmem.data 00002710 00000000 00000000 00000034 2**0
|
10 | CONTENTS, ALLOC, LOAD, READONLY, DATA
|
Ich bin mir nicht sicher, ob das so richtig ist. Auf alle Fälle landet
das Objekt jetzt im Flash (Ausschnitt aus der .map des gesamt Images):
1 | *(.progmem*)
|
2 | .progmem.data 0x000000fa 0x2710 /home/max/work/NeonFlex/bintest/cmdtable.o
|
3 | 0x000000fa _binary_cmdtable_bin_start
|
4 | 0x0000280a _binary_cmdtable_bin_end
|
5 | .progmem.data 0x0000280a 0xc /usr/lib/gcc/avr/4.3.4/../../../avr/lib/avr5/libc.a(vfscanf_std.o)
|
Mein Problem ist, daß ich beim Zugriff auf _binary_cmdtable_bin_start im
Nirvana lande. Hier lasse ich mir die Adresse ausgeben:
1 | extern PGM_VOID_P const _binary_cmdtable_bin_start;
|
2 | extern PGM_VOID_P const _binary_cmdtable_bin_end;
|
3 | ...
|
4 | debug("bin:0x%05x-0x%05x\n",
|
5 | _binary_cmdtable_bin_start,
|
6 | _binary_cmdtable_bin_end);
|
Und die Ausgabe:
*flash_load_list - bin:0x00404-0x00504
Irgendwas läuft beim Linken oder bei Zugriff schief, ich komme aber
nicht drauf. Ich kenne mich mit den binutils und dem linken leider noch
zu wenig aus.
Vielen Dank für eure Kommentare, Anmerkungen, Tipps.
L.