关于F4 的IAP升级问题

2019-07-20 16:59发布

最近在搞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上输出结果会不一样?
没没有人和我遇到一样的问题?

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
5条回答
龙龙
1楼-- · 2019-07-20 22:42
抱歉,有点学艺不精了,丢人,*(vu32*)(FLASH_APP1_ADDR+4)这句语句的含义是在FLASH_APP1_ADDR+4这个绝对地址,取出这个地址的值和0xFF000000进行运算,最后确定FLASH_APP1_ADDR+4这个地址内的内容是否为0X08XXXXX
龙龙
2楼-- · 2019-07-21 04:41
现在在F4上单独加了这些代码
龙龙
3楼-- · 2019-07-21 08:38
本帖最后由 龙龙 于 2017-2-11 14:54 编辑

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.
所以一直跳转失败


DongInker
4楼-- · 2019-07-21 13:08
F103与F407 flash块的分配不一样,F103扇区是等大小的1k或2k,而F407是16k,64k,128k前后扇区不同的
龙龙
5楼-- · 2019-07-21 14:28
 精彩回答 2  元偷偷看……

一周热门 更多>