一,bootload跳转的工作原理
IAP程序也就是Bootloader程序存放在flash里0x800000-0x8003000这个位置,主程序区代码在0x8003000以后,大小看个人。为了方便后续,我设置的大小是0x20000.
②跳转也就是下面这个动作。
/* Test if user code is programmed starting from address "ApplicationAddress" */
if (((*(__IO uint32_t*)ApplicationAddress) & 0x2FFE0000 ) == 0x20000000)
{
/* Jump to user application */
JumpAddress = *(__IO uint32_t*) (ApplicationAddress + 4);
//获取跳转地址
Jump_To_Application = (pFunction) JumpAddress;
//设置跳转函数
/* Initialize user application's Stack Pointer */
__set_MSP(*(__IO uint32_t*) ApplicationAddress);
//初始化堆栈指针
Jump_To_Application();
//跳转到用户应用程序
}
程序正常是从0x8000000位置开始运行的,这里直接跳转到ApplicationAddress 也就是app1地址0x80030000.
通过keil的调试功能也可以看到flash区的情况
后面烧入主程序代码后可以看到,0x8003000上的变化
二,主程序的修改。
主程序区主要是随程序起始位置的修改,大小看个人我认为不影响。
还有偏移量的修改