初级会员

- 积分
- 89
- 金钱
- 89
- 注册时间
- 2016-3-20
- 在线时间
- 17 小时
|
1金钱
最近在搞F4 的IAP升级,从SD卡将数据导入内部FLASH,在跳转时串口显示“非FLASH应用程序!”,一直不成功!我的APP地址为0x08040000,也就是问题出在下面这段代码
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!");
}
在绿色代码的位置判断不通过!
后来用F103的板子下载103的代码,就可以顺利跳转!对比发现代这段代码是相同的!
现在我在F103加了以下代码
printf("F103转换结果%d\r\n",(*(vu32*)(0x08040000+4)));
同样在407上也加了这样的代码
printf("F407转换结果:%d\r\n",(*(vu32*)(0x08040000+4)));
串口显示的结果如下:
F103转换结果134502209
F407转换结果:-1
为什么同样的代码在F103和F407上输出结果会不一样?
没没有人和我遇到一样的问题?
|
最佳答案
查看完整内容[请看2#楼]
抱歉,有点学艺不精了,丢人,*(vu32*)(FLASH_APP1_ADDR+4)这句语句的含义是在FLASH_APP1_ADDR+4这个绝对地址,取出这个地址的值和0xFF000000进行运算,最后确定FLASH_APP1_ADDR+4这个地址内的内容是否为0X08XXXXX
|