void JumpAppProgram(z_u32 u32ApplicationAddress)
{
s_u32ApplicationAdress = (*(__IO uint32_t*)u32ApplicationAddress);
s_u32xxxxxx = u32ApplicationAddress;
/* Test if user code is programmed starting from address "u32ApplicationAddress" */
if (((*(__IO uint32_t*)u32ApplicationAddress) & 0x2FFE0000 ) == 0x20000000)
{
typedef void (*pFunction)(void);
z_u32 JumpAddress = 0x00000000;
pFunction Jump_To_Application;
DebugPrint("\r\n [Jump App Main Function!] \r\n");
/* Jump to user application */
JumpAddress = *(__IO uint32_t*) (u32ApplicationAddress + 4); //把复位地址赋值给JumpAddress
Jump_To_Application = (pFunction) JumpAddress; //初始化用户程序的堆栈指针
/* Initialize user application's Stack Pointer */
__set_PSP(*(__IO uint32_t*) u32ApplicationAddress);
__set_CONTROL(0); //选择主堆栈指针MSP
__set_MSP(*(__IO uint32_t*) u32ApplicationAddress); //STM32 跳转,将主堆栈指针指向用户区域,堆栈
Jump_To_Application(); // 赋给PC指针
}
else
{
DebugPrint("\r\n [Jump App Program Fail!] \r\n");
}
}
传入的地址为0x08020800
s_u32ApplicationAdress = (*(__IO uint32_t*)u32ApplicationAddress);
s_u32xxxxxx = u32ApplicationAddress;
查看到的u32ApplicationAdress 为0xFFFFFFFF
求解释 |