[mw_shl_code=c,true]loadFlashAppbin();//加载bin到flash
Sys_Soft_Reset();//软复位
RUN_APP:
if(((*(vu32*)(FLASH_APP1_ADDR+4))&0xFF000000)==0x08000000){
iap_load_app(FLASH_APP1_ADDR);
}[/mw_shl_code]
[mw_shl_code=c,true]
int loadFlashAppbin(void)
{
const u8 *UNIGBK_SDPATH="0:/TEST/warship.bin"; //UNIGBK.BIN的存放位置
u16 bread; u32 offx=0;
u8 rval=0;
FIL * fftemp;
u8 *tempbuf;
u8 res;
u32 i=0;
fftemp=(FIL*)mymalloc(SRAMIN,sizeof(FIL)); //分配内存
tempbuf=mymalloc(SRAMIN,4096);
if(tempbuf==NULL)rval=1;//分配内存失败
res=f_open(fftemp,(const TCHAR*)UNIGBK_SDPATH,FA_READ);
if(res) rval=2;//打开文件失败
LCD_ShowString(60,40,200,16,16,"Loading...!");
if(rval==0)
{
while(res==FR_OK)
{
res=f_read(fftemp,tempbuf,4096,(UINT *)&bread);
if(res!=FR_OK)
{rval=3;
break;
}
iap_write_appbin(offx+FLASH_APP1_ADDR,tempbuf,bread);//更新FLASH代码
offx+=bread;
i++;
if(i%50==0)
{
LCD_ShowString(60,(i/50)*20+40,200,16,16,"Loading...!");
LED0=0;
LED1=0;
delay_ms(100);
LED0=1;
LED1=1;
}
if(bread!=4096)
break;
}
}
f_close(fftemp);
myfree(SRAMIN,fftemp); //释放内存
myfree(SRAMIN,tempbuf); //释放内存
return rval;
}[/mw_shl_code]