最近需要用到bootloader功能,百度得到了一份代码,bootloader部分如下
[mw_shl_code=c,true]#include "stm32f10x.h"
#include "led.h"
#include "systick.h"
#include "serial.h"
/****************************************************************************
****************************************************************************/
LED led0('C',13);
void (*jump2app)();
//跳转到应用程序段
//appxaddr:用户代码起始地址.
void iap_load_app(u32 appxaddr)
{
if(((*(vu32*)appxaddr)&0x2FFE0000)==0x20000000) //检查栈顶地址是否合法.
{
jump2app=(void(*)())*(vu32*)(appxaddr+4); //用户代码区第二个字为程序开始地址(复位地址)
MSR_MSP(*(vu32*)appxaddr); //初始化APP堆栈指针(用户代码区的第一个字用于存放栈顶地址)
for(int i = 0; i < 8; i++)
{
NVIC->ICER = 0xFFFFFFFF; /* 关闭中断*/
NVIC->ICPR = 0xFFFFFFFF; /* 清除中断标志位 */
}
jump2app(); //跳转到APP.
}
}
int main(void)
{
LED0=1;
LED1=1;
LED2=1;
serial1_init(115200); //串口初始化
while(1)
{
PCout(13)=~ PCout(13);
printf("我是BootLoader 5s后我要跳转到APP程序了
");
delay_ms(1000);
printf("1
");
delay_ms(1000);
printf("2
");
delay_ms(1000);
printf("3
");
delay_ms(1000);
printf("4
");
delay_ms(1000);
printf("准备跳转
");
iap_load_app(0x8002000); //跳转
}
}
[/mw_shl_code]
想问其中的 void (*jump2app)(); 应该如何理解?(基础没学好Orz)
注:LED led0('C',13);是C++实现的初始化LED(PC13)相关代码就不贴了。。。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>