IAP程序占用的空间是 0x08000000--0x0801FFFF
APP程序占用的空间是 0x0802 0000 to 0x0807FFFF
#define ApplicationAddress 0x8020000
跳转程序代码如下:
typedef void (*pFunction)(void);
void reboot_app(void)
{
pFunction Jump_To_Application;
u32 JumpAddress;
if(((*(uint32_t*)ApplicationAddress)&0x2FFE0000)==0x20000000) //检查栈顶地址是否合法.
{
//__set_PRIMASK(1);// 关闭全局中断。注意,在跳转前,必须先关闭全局中断,进入用户程序后,在中断向量表地址设置完成后再开中断。
__disable_irq(); //关中断()
__set_FAULTMASK(1);//关闭所有中断
JumpAddress = *(__IO uint32_t*) (ApplicationAddress + 4);
Jump_To_Application = (pFunction) *(u32*) JumpAddress;
//initialize user application's stack pointer
__set_MSP(*(__IO uint32_t *)ApplicationAddress);
SCB->VTOR = ApplicationAddress; //重定向中断向量表
Jump_To_Application();
}
}
程序下载完成后,执行到Jump_To_Application就死掉了,进不到应用程序里面,以前用GD32F1x系列都没问题,这个F4xx跳转有什么不同吗?麻烦知道的同仁给指点一下!不胜感激!! |