keil中的程序跳转IAP

匿名 (未验证) 提交于 2019-12-02 23:55:01

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

 

}

}

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!