我需要在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.
我如何得到这个链接?