keil中的程序跳转IAP

//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

}

}

猜你喜欢

转载自www.cnblogs.com/zhangtongxin/p/11410285.html
IAP
今日推荐