Мне нужно использовать код банка в микроконтроллере 8051, чтобы вместить весь код. SDCC говорит, что поддерживает его, но у меня возникают проблемы на этапе компоновки.
У меня есть тестовый проект с 3 файлами: main.c, func1.c и bank.asm. Основная функция должна вызывать func1 () и затем находиться в цикле while. Но func1 () находится в другом банке кода.
// main.c
int func1(void) banked;
void main()
{
int i = func1();
while(i)
{
}
}
// func1.c
#pragma codeseg BANK1
int func1(void) {
return 99; }
//bank.asm
.area HOME (CODE)
.area GSINIT0 (CODE)
.area GSINIT1 (CODE)
.area GSINIT2 (CODE)
.area GSINIT3 (CODE)
.area GSINIT4 (CODE)
.area GSINIT5 (CODE)
.area GSINIT (CODE)
.area GSFINAL (CODE)
.area CSEG (CODE)
.area HOME (CODE)
__sdcc_banked_call::
ret ;make the call
__sdcc_banked_ret::
ret ;return to caller
У меня есть пакетный файл сборки, чтобы скомпилировать все и связать все вместе.
sdcc -c func1.c
sdcc -c main.c
asx8051 -ol bank.asm
sdcc "-Wl -b BANK1=0x018000" main.rel func1.rel bank.rel
Я получаю эту ошибку компоновщика:
?ASlink-Error-Insufficient ROM/EPROM/FLASH memory.
Как мне получить ссылку?