avr-gcc generowanie pliku bin

Feb 12, 2012 2 Replies

Zainstalowane mam AVR Studio 5, wraz z gcc. Chciałem automatycznie generować plik bin. Poszperałem trochę i znalazłem, że należy użyć polecenia:



avr-objcopy.exe --output-target binary ...



Wpisałem w okienko "Post build event command line":



$(QUOTE)$(AVR_APP_PATH)avr-objcopy.exe$(QUOTE) --output-target binary $(OutputFile) $(Name).bin



i otrzymałem plik o długości 8 454 152 B, a powinien mieć 11 514 B. Dlaczego? Program jest dla ATmega128. Teraz używam jakiegoś znaleziska hex2bin.exe, ale zastanawia mnie, jak to zrobić za pomocą avr-objcopy (lub inaczej z wykorzystaniem narzędzi wbudowanych w kompilator). Nie chce mi się jednocześnie bawić we własny makefile.



Plik HEX: :100000000C94C4020C94E3020C94E3020C94E302FB :100010000C94E3020C94E3020C94E3020C94E302CC :100020000C94E3020C94E3020C94E3020C94E302BC :100030000C947A060C94E3020C94E3020C94E30211 :100040000C94E3020C94E3020C94C6030C94410359 :100050000C94E3020C94E3020C94E3020C94E3028C ....... :102C70004A3318F0495D31FD4052419302D0A9F723 :102C8000EACFB4E0A6959795879577956795BA951D :102C9000C9F700976105710508959B01AC010A2EE3 :102CA00006945795479537952795BA95C9F7620FBA :0E2CB000731F841F951FA01D0895F894FFCF79 :102CBE000D0A206E65772062617564726174653AE3 :102CCE00202564000D0025303278003D2530327805 :102CDE0020000000000300000000E50200000000DC :0C2CEE000301FF01010101081929090080 :00000001FF



Nie wiem co to za 'zakłócenie' w linijce o adresie 0x2CB0, przecież obszar jest ciągły...



Binarka zaraz za programem zawiera zera, tylko na samym końcu jakieś różne od zera (podgląd HEX):



0080FFF0: 00 00 00 00 00 00 00 00 | 00 00 00 00 00 00 00 00
00810000: 01 FF 01 01 01 01 00 00 |

Michał


avr-objdump -h -S prg.elf >prg.lst

Dowiesz się co to jest.

W dniu 2012-02-12 20:03, Sebastian Biały pisze:

Dzięki Sebastian za podpowiedź! Moje środowisko już generuje ten plik pod nazwą *.lss. Domyślałem się, że coś nie tak z sekcjami... "Zawadzała" sekcja .eeprom. Poradziłem sobie linijką: $(QUOTE)$(AVR_APP_PATH)avr-objcopy.exe$(QUOTE) -j .text -j .data -O binary $(OutputFile) $(Name).bin

Przy pierwszej próbie nie dałem -j .data, a to jest wymagane. Widać muszę się dokształcić bo nie wiem co to jest VMA i LMA. Może ktoś zna miejsce, gdzie jest to wszystko PROSTO opisane.

Michał

Mój plik .lss aes_tx.elf: file format elf32-avr

Sections: Idx Name Size VMA LMA File off Algn 0 .data 00000066 00800100 00002530 000025e4 2**0 CONTENTS, ALLOC, LOAD, DATA 1 .text 00002530 00000000 00000000 000000b4 2**1 CONTENTS, ALLOC, LOAD, READONLY, CODE 2 .bss 00000158 00800166 00800166 0000264a 2**0 ALLOC 3 .eeprom 00000005 00810000 00810000 0000264a 2**0 CONTENTS, ALLOC, LOAD, DATA 4 .stab 00001008 00000000 00000000 00002650 2**2 CONTENTS, READONLY, DEBUGGING 5 .stabstr 00000346 00000000 00000000 00003658 2**0 CONTENTS, READONLY, DEBUGGING 6 .debug_aranges 000000a0 00000000 00000000 0000399e 2**0 CONTENTS, READONLY, DEBUGGING 7 .debug_pubnames 000000ae 00000000 00000000 00003a3e 2**0 CONTENTS, READONLY, DEBUGGING 8 .debug_info 00000b3d 00000000 00000000 00003aec 2**0 CONTENTS, READONLY, DEBUGGING 9 .debug_abbrev 00000636 00000000 00000000 00004629 2**0 CONTENTS, READONLY, DEBUGGING 10 .debug_line 00000cdb 00000000 00000000 00004c5f 2**0 CONTENTS, READONLY, DEBUGGING 11 .debug_frame 000000a0 00000000 00000000 0000593c 2**2 CONTENTS, READONLY, DEBUGGING 12 .debug_str 000002e1 00000000 00000000 000059dc 2**0 CONTENTS, READONLY, DEBUGGING 13 .debug_loc 000007a8 00000000 00000000 00005cbd 2**0 CONTENTS, READONLY, DEBUGGING 14 .debug_pubtypes 0000015e 00000000 00000000 00006465 2**0 CONTENTS, READONLY, DEBUGGING 15 .debug_ranges 00000068 00000000 00000000 000065c3 2**0 CONTENTS, READONLY, DEBUGGING

Michał

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required