最近在搞F4 的IAP升级,从SD卡将数据导入内部FLASH,在跳转时串口显示“非FLASH应用程序!”,一直不成功!我的APP地址为0x08040000,也就是问题出在下面这段代码
printf("开始执行FLASH用户代码!!
");
if(((*(vu32*)(FLASH_APP1_ADDR+4))&0xFF000000)==0x08000000)//判断是否为0X08XXXXXX.
{
iap_load_app(FLASH_APP1_ADDR);//执行FLASH APP代码
}else
{
printf("非FLASH应用程序,无法执行!
");
LCD_ShowString(30,210,200,16,16,"Illegal FLASH APP!");
}
在绿 {MOD}代码的位置判断不通过!
后来用F103的板子下载103的代码,就可以顺利跳转!对比发现代这段代码是相同的!
现在我在F103加了以下代码
printf("F103转换结果%d
",(*(vu32*)(0x08040000+4)));
同样在407上也加了这样的代码
printf("F407转换结果:%d
",(*(vu32*)(0x08040000+4)));
串口显示的结果如下:
F103转换结果134502209
F407转换结果:-1
为什么同样的代码在F103和F407上输出结果会不一样?
没没有人和我遇到一样的问题?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
printf("FLASH_APP1_ADDR+4转换结果:%d ",FLASH_APP1_ADDR+4);printf("(*(vu32*)(FLASH_APP1_ADDR+4))转换结果:%d ",(*(vu32*)(FLASH_APP1_ADDR+4)));
printf("((*(vu32*)(FLASH_APP1_ADDR+4))&0xFF000000)转换结果:%d ",((*(vu32*)(FLASH_APP1_ADDR+4))&0xFF000000));
printf("0x08000000转换结果:%d ",0x08000000);
窗口输出结果为:
FLASH_APP1_ADDR+4转换结果:134283268
(*(vu32*)(FLASH_APP1_ADDR+4))转换结果:-1998043635
((*(vu32*)(FLASH_APP1_ADDR+4))&0xFF000000)转换结果:-2013265920
0x08000000转换结果:134217728
红 {MOD}的这两个是IAP跳转前if判断的结果
if(((*(vu32*)(FLASH_APP1_ADDR+4))&0xFF000000)==0x08000000)//判断是否为0X08XXXXXX.
所以一直跳转失败
一周热门 更多>