经过测试,能够从boot到app的跳转,使用Keil V5。自定义引导加载程序位于IROM 0x08000000。应用程序位于IROM 0x08020000。需要在Keil设置的boot和app两个内存地址。现在的棘手部分是Keil在指定的内存地址的开始处使用一块内存来完成一些工作。在引导加载程序应用程序中进行调试时,在重置处理程序中加载到R0的__main指针将是0x08001AD而不是预期的0x08000000。因此,boot跳转例程是:JumpAddress = 0x080201AD; // 应用程序地址偏移 + ''Keil偏移''Jump_To_Application = (pFunction) JumpAddress;NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x20000); // 应用程序地址偏移__set_MSP((__IO uint32_t) 0x08020000); // 初始化用户应用程序的堆栈指针Jump_To_Application();即使改变boot中app的地址,Keil偏移仍然是0x1AD。在BTL和app中使用相同的时钟。在app中使用了RTX,但在BTL中未启用,如果在BTL中启用RTX,则跳转失败。我的问题是为什么Keil有这个“常量”地址偏移?能否在boot中带有RTX启用的BTL跳转?如何做...
|