//appxaddr:用户代码起始地址.
void Session_Change_load_app(u32 appxaddr)
{
__set_PRIMASK(1); //关闭总中断
if(((*(__IO uint32_t *) appxaddr) & 0x2FFE0000) == 0x20000000)
{
__ASM("CPSID I");
jump2app = (Session_Changefun)*(__IO uint32_t *) (appxaddr + 4);//复位函数
__set_MSP(*(__IO uint32_t *) appxaddr);//设置栈顶
jump2app();
}
}
//用户代码主函数
int main(void)
{
//step1:启动系统时钟(选择)
//step2:初始化所有的外设
//step3:开放总中断
__set_PRIMASK(0); //开放总中断,跳转会无条件触发正在运行中断,若本段代码中无该中断,则会死锁
__enable_irq ();
while(1)
{
//do something
}
}