就是第一次烧写的是high地址区,运行的代码是
JumpAddress = *(__IO uint32_t*) (high+4);
Jump_To_Application = (pFunction) JumpAddress;
__set_MSP(*(__IO uint32_t*) high);
Jump_To_Application();
而应用程序触发IAP事件后再烧写low地址区:
JumpAddress = *(__IO uint32_t*) (low+4);
Jump_To_Application = (pFunction) JumpAddress;
__set_MSP(*(__IO uint32_t*) low);
Jump_To_Application();
这样可以防止在烧写的过程中发生问题还可以回到上一次烧写的区域继续运行程序
但是我发现第一次进入high地址之后就再也不能跳转到low了,而运行的代码确确实实是
JumpAddress = *(__IO uint32_t*) (low+4);
Jump_To_Application = (pFunction) JumpAddress;
__set_MSP(*(__IO uint32_t*) low);
Jump_To_Application();我用串口在之前输出标志了的。
然后JumpAddress = *(__IO uint32_t*) (high+4);中为什么要在跳转的地址上加四呢
就是第一次烧写的是high地址区,运行的代码是
JumpAddress = *(__IO uint32_t*) (high+4);
Jump_To_Application = (pFunction) JumpAddress;
__set_MSP(*(__IO uint32_t*) high);
Jump_To_Application();
而应用程序触发IAP事件后再烧写low地址区:
JumpAddress = *(__IO uint32_t*) (low+4);
Jump_To_Application = (pFunction) JumpAddress;
__set_MSP(*(__IO uint32_t*) low);
Jump_To_Application();
这样可以防止在烧写的过程中发生问题还可以回到上一次烧写的区域继续运行程序
但是我发现第一次进入high地址之后就再也不能跳转到low了,而运行的代码确确实实是
JumpAddress = *(__IO uint32_t*) (low+4);
Jump_To_Application = (pFunction) JumpAddress;
__set_MSP(*(__IO uint32_t*) low);
Jump_To_Application();我用串口在之前输出标志了的。
然后JumpAddress = *(__IO uint32_t*) (high+4);中为什么要在跳转的地址上加四呢
举报