我用bootloader跳转APP ,APP是RTTHREAD ,能够运行打印版本查询都正确,但是到创建rt_application_init的时候会死循环在里面,如图 死循环在rt_timer_init中
bootloader代码如下:
if(((*(u32*)appxaddr)&0x2FFE0000) == 0x20000000) //检查栈顶地址是否合法.
{
__set_PRIMASK(1);
jump2app=(iapfun)*(u32*)(appxaddr+4); //用户代码区第二个字为程序开始地址(复位地址)
MSR_MSP(*(u32*)appxaddr); //初始化APP堆栈指针(用户代码区的第一个字用于存放栈顶地址)
for (int i = 0; i < 8; i++)
{
NVIC->ICER[i] = 0xFFFFFFFF;
NVIC->ICPR[i] = 0xFFFFFFFF;
}
for(int i=0; i<128; i++)
{
HAL_NVIC_DisableIRQ(i);
HAL_NVIC_ClearPendingIRQ(i);
}
__disable_irq();
HAL_DeInit();
HAL_RCC_DeInit();
SysTick->CTRL = 0;
SysTick->LOAD = 0;
SysTick->VAL = 0;
__set_PRIMASK(0);
__set_CONTROL(0);
__set_MSP(appxaddr);
jump2app(); //跳转到APP.
}
APP 已经设置偏移地址 ,
用的MCU为STM32L433RCT6