跳转函数如下,实际跳转不了,请问各位大侠问题出在哪儿,多谢
#define APP_A_RELOCA
tiON_ADDRESS 0x08000000
#define APP_B_RELOCATION_ADDRESS 0x08080000
void jump_app_task(uint8_t ABZone)
{
uint32_t i=0;
__IO uint32_t AppAddress = 0;
void (*SysMemBootJump)(void); /* 声明一个函数指针 */
/* 关闭全局中断 */
__set_PRIMASK(1);
/* 关闭滴答定时器,复位到默认值*/
SysTick->CTRL = 0;
SysTick->LOAD = 0;
SysTick->VAL = 0;
/* 设置所有时钟到默认状态,使用HSI时钟 */
HAL_RCC_DeInit();
/* 关闭所有中断,清除所有中断挂起标志 */
for (i = 0; i < 8; i++)
{
NVIC->ICER[i]=0xFFFFFFFF;
NVIC->ICPR[i]=0xFFFFFFFF;
}
SCB_DisableDCache();
/* 使能全局中断 */
__set_PRIMASK(0);
[i][i] if(ABZone == 0xaa)
{
/* 跳转到appA,首地址是MSP,地址+4是复位中断服务程序地址*/
SysMemBootJump = (void (*)(void)) (*((uint32_t *) (APP_A_RELOCATION_ADDRESS + 4)));
AppAddress = APP_A_RELOCATION_ADDRESS;
}
else
{
/* 跳转到appB,首地址是MSP,地址+4是复位中断服务程序地址*/
SysMemBootJump = (void (*)(void)) (*((uint32_t *) (APP_B_RELOCATION_ADDRESS + 4)));
AppAddress = APP_B_RELOCATION_ADDRESS;
}
/* 设置主堆栈指针*/
__set_MSP(*(__IO uint32_t*)AppAddress);
/* 在RTOS工程,这条语句很重要,设置为特权级模式,使用MSP指针 */
__set_CONTROL(0);
/* 跳转到系统BootLoader*/
SysMemBootJump();
/* 跳转成功的话,不会执行到这里,用户可以在这里添加代码 */
while (1)
{
}
}