我需要在8051微控制器中使用代碼銀行業務以適應所有的代碼。 SDCC表示它支持它,但我在鏈接步驟遇到麻煩。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.
我如何得到這個鏈接?