typedef void (*pFunction)(void); //定义一个函数类型的参数
pFunction Jump_To_Application; //函数指针
JumpAddress = *(__IO uint32_t*) (FLASH_USER_START_ADDR + 4);
Jump_To_Application = (pFunction) JumpAddress;
__set_MSP(*(__IO uint32_t*) FLASH_USER_START_ADDR); Jump_To_Application(); 1.JumpAddress = *(__IO uint32_t*) (ApplicationAddress + 4); JumpAddress代表跳转地址,基于应用程序起始地址偏移4 这个地址就是应用程序的复位地址,你可以理解为程序跳转到了应用程序复位的地址.
2 .Jump_To_Application(); Jump_To_Application = (pFunction) JumpAddress; //将跳转地址JumpAddress强制转换pFunction类型,你可以理解为编译器将其编译成一个函数。
3.__set_MSP(*(__IO uint32_t*) FLASH_USER_START_ADDR); 这里是将把应用程序起始地址设为栈顶指针
4.Jump_To_Application(); 设置PC指针为复位地址,你可以理解为跳转到应用程序的函数