C8051Fbootloader跳转问题求解?

最近写了一个F120的bootloader,F120有128kbflash,程序FLASH分配如下:


//地址区域划分
#define D_APP_START        0x00000            // APP区起始地址
#define D_APP_LIMIT        0x1E000            // APP区结束地址:120KByte

#define D_RUN_ADDRESS     0x1E001            // APP运行地址,到boot有512Byte空间,可以保存跳转地址

#define D_BOOT_ADDR        0x1E201         // Boot程序存储地址
#define D_BOOT_LIMIT       0x1FA01            // Boot区结束地址:4KByte

#define D_FLASH_LIMIT       0x1FBFD            // FLASH可操作区结束地址-存储非易失性数据

我将bootloader,放在高地址区域。在keil中进行了相应的设置:将target-> BL51 loacation ->code range 设置为boot存储的地址0x1E201-0x1FA01 ,然后 将CODE->设置为 ?C_C51STARTUP(1E001) 。
擦除之前保存地址0,1,2中的数据,擦除后在重新将保存的0,1,2中的数据写回去。主要是后一步,启动后如何跳转进boot呢,是不是在地址3处写入跳转地址0x1E001,进入boot后检测有没有下载信号,如果没有,则跳转到APP区执行程序,那么如何跳回去呢?.。有些混乱,求指正?

51汇编指令不支持超过64K的地址空间

其实我建议还是不要折腾这种带bank的51的bootloader了,这个需要硬件支持才行。
超过64K还是上ARM吧,价格并不贵,性能高很多,还不必这么折腾

第一个问题,启动后如何跳转到Boot区域,程序执行,都是从0x0000地址处开始的,你只需要在0x0000处加一个跳转指令,把程序跳转到boot区就可以了。
第二个问题,如何跳回程序区,((void(*)(void))0x1E001)(); 可以实现强制跳转到0x1E001地址处运行