最近几天想弄个IAP,参考了一些网友的思路和资料,今天动手做个小测试,目前测试还算理想,思路大家可以自己到网上参考,我就直接上代码了
BootLoader 段:
#define APPLICATION_ADDRESS1 0x08003400 //应用程序1的起始地址
#define APPLICATION_ADDRESS2 0x08009800 //应用程序2的起始地址
#define APPUPGrade_ADDRESS 0x08003000 //升级程序存储起始地址 bootloader 区域内后一页地址
#define FLASH_PAGE_SIZE 1024 //FLash容量128K以内的,每页大小1K,1024个字节
typedef void (*pFunction)(void); //声明一个函数指针
pFunction Jump_To_Application; //定义函数指针Jump_To_Application
void BootLoad_Jump(u32 APPaddress)
{
u32 JumpAddress;
JumpAddress = *(volatile u32*)(APPaddress + 4);//应用程序执行的起始地址
Jump_To_Application = (pFunction) JumpAddress; //函数指针赋值函数地址
__set_MSP(*(volatile u32*) APPaddress); //因为要执行另外的程序,堆栈要重新初始化
Jump_To_Application(); //跳转到要执行的APP
}