This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

Code Banking & LX51

Hello,

I am using code banking for my 106 KB code, divided into 2 code banks. The linker is BL51. The output listing(m51 file) generated by keil is as follows:

BL51 BANKED LINKER/LOCATER V6.11, INVOKED BY:
C:\KEIL\C51\BIN\BL51.EXE COMMON {.\output\L51_BANK.obj}, COMMON {.\output\mic40.obj}, BANK0 {.\output\Line40.obj}, BANK1
>>  {.\output\print40.obj} TO .\output\832V2 BANKAREA (0X3710, 0XFFFF) REGFILE (.\output\832V2.ORC) PRINT (.\listing\832
>> V2.m51) RAMSIZE (256) BANK0 (?CO?LINE40 (0X8000), ?PR?MAIN?LINE40 (0XFF00)) BANK1 (?CO?PRINT40 (0X8000)) OVERLAY (LIN
>> EINIT ~ RUNLINEMANAGER, CREATETASK ! RUNLINEMANAGER, LINEINIT ~ RUNTRUNKMANAGER, CREATETASK ! RUNTRUNKMANAGER, INITHA
>> RDWARE ~ DSSSENDRECIEVE, CREATETASK ! DSSSENDRECIEVE, INITHARDWARE ~ DSSSENDRECIEVEPROTOCAL, CREATETASK ! DSSSENDRECI
>> EVEPROTOCAL) CODE (0X2000-0XFFFF, ?PR?ONTIMERISR?MIC40 (0X2000), ?PR?ONSERIALPORTISR?MIC40 (0X2500)) DATA (0X30) IDAT
>> A (0X30)

Program Size: data=94.6 xdata=57576 code=105686
LINK/LOCATE RUN COMPLETE.  0 WARNING(S),  0 ERROR(S)

In the above text, the notations are as follows : a) Common(Mic40.c),Bank0(Line40.c), bank1(print40.c). b) ONTIMERISR is Timer 0 interrupt routine. c) ONSERIALPORTISR is Serial interrupt routine, and d) main() is located at 0xFF00 in bank 0
******************************************************************************
Now, I compiled my code using LX51 linker of Keil. The code compilation is ok. The output listing(map file) generated is also similar to the one in m51 format. It is as shown:

LX51 LINKER/LOCATER V4.25, INVOKED BY:
C:\KEIL\C51\BIN\LX51.EXE COMMON {.\output\L51_BANK.obj}, COMMON {.\output\mic40.obj}, BANK0 {.\output\Line40.obj}, BANK1
>>  {.\output\print40.obj} TO .\output\832V2NX BANKAREA (0X003710, 0X00FFFF) REGFILE (.\output\832V2NX.ORC) PRINT (.\lis
>> ting\832V2NX.map) OVERLAY (LINEINIT ~ RUNLINEMANAGER, CREATETASK ! RUNLINEMANAGER, LINEINIT ~ RUNTRUNKMANAGER, CREATE
>> TASK ! RUNTRUNKMANAGER, INITHARDWARE ~ DSSSENDRECIEVE, CREATETASK ! DSSSENDRECIEVE, INITHARDWARE ~ DSSSENDRECIEVEPROT
>> OCAL, CREATETASK ! DSSSENDRECIEVEPROTOCAL) CLASSES (CODE (C:0X2000-C:0XFFFE), IDATA (I:0X55-I:0XFF)) SEGMENTS (?PR?ON
>> TIMERISR?MIC40 (C:0X2000), ?PR?ONSERIALPORTISR?MIC40 (C:0X2500), ?CO?MIC40 (C:0X2600), ?CO?LINE40 (B0:0X8000), ?PR?MA
>> IN?LINE40 (B0:0XFF00), ?CO?PRINT40 (B1:0X8000))

Program Size: data=94.6 xdata=57576 const=10877 code=89687
LX51 RUN COMPLETE.  0 WARNING(S),  0 ERROR(S)

The problem is that my system is not booting. I suspect that the control is not detecting main(), and is not executing the primary initializations in main().

Will LX51 support code banking? What parameters have to be modified in the Keil Target options?

Please advise.