- UID
- 1029342
- 性别
- 男
|
4.跳转到新程序运行 更新完程序后就需要跳转到新程序开始运行,具体实现看下面代码:
本文引用地址:http://www.eepw.com.cn/article/174370.htm typedef void (*iapfun)(void); //定义一个函数类型的参数
iapfun jump2app;
__asm void MSR_MSP(u32 addr) //设置堆栈指针
{
MSR MSP, r0
BX r14
}
//跳转到应用程序段
//appxaddr:用户代码起始地址.
void iap_load_app(u32 appxaddr)
{
if(((*(vu32*)appxaddr)&0x2FFE0000)==0x20000000) //检查栈顶地址是否合法.
{
jump2app = (iapfun)*(vu32*)(appxaddr+4);//用户代码区第二个字为程序开始地址(复位地址),此处查看中断向量表可知
MSR_MSP(*(vu32*)appxaddr);//初始化APP堆栈指针(用户代码区的第一个字用于存放栈顶地址)
jump2app(); //跳转到APP,执行复位中断程序
}
}
APP程序设计注意
1.编译软件需要做出设置:
在Bootloader程序中已经指定了APP程序存储的起始地址为0x08010000,所以在APP程序设计时需要将编译软件这里做出设置,修改起始地址和大小。
2.修改system_stm32f10x.c文件
同样是针对于APP的起始地址改变而修改这里的偏移量,如上图所示。
文中只是简单的介绍了关于Bootloader程序的设计,作为抛砖引玉,大家可以继续深入,添加数据校验和程序加密等。
|
|