AppJump 函数指针怎么定义的,要定义成全局变量,避免使用堆栈,因为你中途修改了堆栈地址
譬如:
[C] 纯文本查看 复制代码
static void jump2app(void)
{
uint32_t stack = *(uint32_t*)APP_ADDR;
uint32_t func = *(uint32_t*)(APP_ADDR + 4);
SysTick->CTRL = 0; // disable systick irq
printf("j app ...\n");
while (!(USART_STAT(USART1) & USART_STAT_TC));
__set_MSP(stack); // init stack pointer
((void(*)()) func)();
while (true);
}
改为:
[C] 纯文本查看 复制代码
static void jump2app(void)
{
static uint32_t func; // not on stack (MSP switches before use)
uint32_t stack = *(uint32_t*)APP_ADDR;
func = *(uint32_t*)(APP_ADDR + 4);
SysTick->CTRL = 0; // disable systick irq
printf("j app ...\n");
while (!(USART_STAT(USART1) & USART_STAT_TC));
__set_MSP(stack); // init stack pointer
((void(*)()) func)();
while (true);
}
|