Mam taki kod linkera:
I dopuki kod zajmowal mniej niz 256 bajtow to wszystko sie linkowalo. Po przekroczeniu 256 bajtow kodu wykonywalnego pojawia sie blad linkowania:
Czyli krzyczy, ze kod wykonywalny wchodzi na dane. Wiemy ze kod trzymany jest w pamieci FLASH a reszta w SRAM, ale jak to powiedziec linkierowi?
Troche dziwne :/ Chyba ten linkier z GCC jest zbyt mocno nastawiony na maszyny z pamiecia przechowujaca kod i dane programu.
Z gory dziekuje za pomoc
MEMORY
{
CODE (xr) : ORIGIN = 0x0000, LENGTH = 128K
DATA (rw) : ORIGIN = 0x0100, LENGTH = 4K
}
SECTIONS
{
.text 0x0000 :
{
*(.text)
}
. = ALIGN(2);
.rodata :
{
*(.rodata)
}
. = ALIGN(2);
.data :
{
*(.data)
}
. = ALIGN(2);
.bss :
{
*(.bss)
}
. = ALIGN(2);
}I dopuki kod zajmowal mniej niz 256 bajtow to wszystko sie linkowalo. Po przekroczeniu 256 bajtow kodu wykonywalnego pojawia sie blad linkowania:
avr-ld: section .bss [0000000000000100 -> 0000000000000105] overlaps section .text [0000000000000000 -> 00000000000001b5]
Czyli krzyczy, ze kod wykonywalny wchodzi na dane. Wiemy ze kod trzymany jest w pamieci FLASH a reszta w SRAM, ale jak to powiedziec linkierowi?
Troche dziwne :/ Chyba ten linkier z GCC jest zbyt mocno nastawiony na maszyny z pamiecia przechowujaca kod i dane programu.
Z gory dziekuje za pomoc