JS
Guest
Mon Nov 16, 2015 9:35 pm
Witam,
Próbuję przesiąść się ze środowiska VMLAB + avrgcc na Eclipse + AVR
plugin + avrgcc. W celach treningowych chciałem skompilować program
zawierający część procedur w sekcji bootloadera. Dostaję błąd:
........ /../../avr/bin/ld.exe: section .bootloader [00002bd8 ->
00002eed] overlaps section .data [00002bd8 -> 00002d8f]
make: *** [mypos.elf] Error 1
W poprzednim środowisku taki błąd pojawiał się, gdy w makeflie-u nie
było definicji:
LDFLAGS = -lm -Wl,-M,--section-start=.bootloader=0x7c00
Tu wygląda, że trzeba dopisać deklarację "bootloader" do pliku
Release\mypos.map ale on uparcie przed kompilacją odtwarza się do
pierwotnego stanu i deklaracja znika.
Jak należy zdefiniować taką deklarację, żeby została uwzględniona?
Pozdrawiam
JS
Artur Miller
Guest
Mon Nov 16, 2015 10:29 pm
W dniu 2015-11-16 o 21:35, JS pisze:
Quote:
Witam,
[...]
Tu wygląda, że trzeba dopisać deklarację "bootloader" do pliku
Release\mypos.map ale on uparcie przed kompilacją odtwarza się do
pierwotnego stanu i deklaracja znika.
..map to raczej plik wynikowy linkera.
a.
JS
Guest
Tue Nov 17, 2015 7:53 pm
W dniu 2015-11-16 o 22:29, Artur Miller pisze:
Quote:
W dniu 2015-11-16 o 21:35, JS pisze:
Witam,
[...]
Tu wygląda, że trzeba dopisać deklarację "bootloader" do pliku
Release\mypos.map ale on uparcie przed kompilacją odtwarza się do
pierwotnego stanu i deklaracja znika.
.map to raczej plik wynikowy linkera.
a.
Znalazłem!!!
Zarówno makefile jak i plik .map są tworzone na bieżąco, więc ich
modyfikacja rzeczywiście nie ma sensu.
Trzeba we właściwościach projektu wybrać Settings -> AVR C Linker ->
General i okienku Other Arguments wpisać:
-Wl,-M,--section-start=.bootloader=0x7c00 (gdzie 0x7c00 to adres
segmentu bootloadera, np. 0x7c00 dla ATmega32)
Makefile jest wtedy tworzony z tą opcją i błędów kompilacji już nie ma.
Pozdrawiam
JS