金牌会员
 
- 积分
- 1289
- 金钱
- 1289
- 注册时间
- 2014-6-15
- 在线时间
- 143 小时
|
5金钱
if(key==KEY_UP)
{
if(applenth)
{
printf("开始更新固件...\r\n");
LCD_ShowString(60,210,200,16,16,"Copying APP2FLASH...");
if(((*(vu32*)(0X20001000+4))&0xFF000000)==0x08000000)//判断是否为0X08XXXXXX.
{
iap_write_appbin(FLASH_APP1_ADDR,USART_RX_BUF,applenth);//更新FLASH代码
delay_ms(100);
LCD_ShowString(60,210,200,16,16,"Copy APP Successed!!");
printf("固件更新完成!\r\n");
}else
{
LCD_ShowString(60,210,200,16,16,"Illegal FLASH APP! ");
printf("非FLASH应用程序!\r\n");
}
}else
{
printf("没有可以更新的固件!\r\n");
LCD_ShowString(60,210,200,16,16,"No APP!");
}
clearflag=7;//标志更新了显示,并且设置7*300ms后清除显示
}
if(key==KEY_LEFT)
{
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(60,210,200,16,16,"Illegal FLASH APP!");
}
clearflag=7;//标志更新了显示,并且设置7*300ms后清除显示
}
上边是战舰开发板的串口IAP实验的部分代码, 红色标注的部分怎么理解?
((*(vu32*)(0X20001000+4))&0xFF000000)==0x08000000 为什么会成立呢
((*(vu32*)(FLASH_APP1_ADDR+4))&0xFF000000)==0x08000000 呢
|
最佳答案
查看完整内容[请看2#楼]
请回答3个问题:
1,stm32正常运行的 flash代码存放在哪里?
2,编译后的代码(bin文件),第一个4个字节存放什么?
3,问题2之后,第二个4个字节,存放什么?
如果能回答了,楼主位的问题也就解答了。
如果不能,那么请阅读我们教程。
|