初级会员

- 积分
- 192
- 金钱
- 192
- 注册时间
- 2017-9-17
- 在线时间
- 19 小时
|
发表于 2017-10-30 09:40:22
|
显示全部楼层
请问一下:
原子哥的代码里
#define FLASH_APP1_ADDR 0x08010000 //第一个应用程序起始地址(存放在FLASH)
if(key==KEY1_PRES)
{
printf("开始执行FLASH用户代码!!\r\n");
if(((*(vu32*)(FLASH_APP1_ADDR+4))&0xFF000000)==0x08000000)//判断是否为0X08XXXXXX.
{
iap_load_app(FLASH_APP1_ADDR);//执行FLASH APP代码
}else
{
printf("非FLASH应用程序,无法执行!\r\n");
LCD_ShowString(30,210,200,16,16,"Illegal FLASH APP!");
}
clearflag=7;//标志更新了显示,并且设置7*300ms后清除显示
}
//跳转到应用程序段
//appxaddr:用户代码起始地址.
void iap_load_app(u32 appxaddr)
{
if(((*(vu32*)appxaddr)&0x2FFE0000)==0x20000000) //检查栈顶地址是否合法.
{
jump2app=(iapfun)*(vu32*)(appxaddr+4); //用户代码区第二个字为程序开始地址(复位地址)
MSR_MSP(*(vu32*)appxaddr); //初始化APP堆栈指针(用户代码区的第一个字用于存放栈顶地址)
jump2app(); //跳转到APP.
}
}
执行的是Flash里的代码,为什么调用void iap_load_app(u32 appxaddr) 里面开始就判断if(((*(vu32*)appxaddr)&0x2FFE0000)==0x20000000) 麻烦解惑一下,感谢!!! |
|