原来的复位代码如下:
void ota_manage(void){
#ifdef _OTA_
if(ota_state){
switch(ota_state){
case 1 :
#if defined(_DEBUG_) || defined(_SYD_RTT_DEBUG_)
dbg_printf("start FwErase\r\n");
#endif
CmdFwErase();
#if defined(_DEBUG_) || defined(_SYD_RTT_DEBUG_)
dbg_printf("OTA start\r\n");
#endif
ota_state =2;
ota_writecnt=0;
break;
case 2 :
ota_writecnt++;
if(ota_writecnt>0x20)
{
#if defined(_DEBUG_) || defined(_SYD_RTT_DEBUG_)
dbg_printf("OTA faile\r\n");
#endif
Timer_Evt_Stop(EVT_1S_OTA);
}
break;
case 3 :
ota_state=0;
Timer_Evt_Stop(EVT_1S_OTA);
#if defined(_DEBUG_) || defined(_SYD_RTT_DEBUG_)
dbg_printf("OTA finish\r\n");
#endif
delay_ms(1000);
#if defined(_DEBUG_) || defined(_SYD_RTT_DEBUG_)
dbg_printf("Start Reset 1000s\r\n");
#endif
SystemReset();
break;
default :
break;
}
}
#endif
}
在进行IOS老化测试的时候不知道为什么复位总是不成功,会出现各种问题,可能是复位过成功发生了中断了,所以代码改成这样:
void ota_manage(void){
#ifdef _OTA_
if(ota_state){
switch(ota_state){
case 1 :
#if defined(_DEBUG_) || defined(_SYD_RTT_DEBUG_)
dbg_printf("start FwErase\r\n");
#endif
CmdFwErase();
#if defined(_DEBUG_) || defined(_SYD_RTT_DEBUG_)
dbg_printf("OTA start\r\n");
#endif
ota_state =2;
ota_writecnt=0;
break;
case 2 :
ota_writecnt++;
if(ota_writecnt>0x20)
{
#if defined(_DEBUG_) || defined(_SYD_RTT_DEBUG_)
dbg_printf("OTA faile\r\n");
#endif
Timer_Evt_Stop(EVT_1S_OTA);
}
break;
case 3 :
ota_state=0;
Timer_Evt_Stop(EVT_1S_OTA);
#if defined(_DEBUG_) || defined(_SYD_RTT_DEBUG_)
dbg_printf("OTA finish\r\n");
#endif
delay_ms(1000);
#if defined(_DEBUG_) || defined(_SYD_RTT_DEBUG_)
dbg_printf("Start Reset 1000s\r\n");
#endif
SystemReset();
__disable_irq();
delay_ms(3000);
__enable_irq();
break;
default :
break;
}
}
#endif
}
OTA成功如下: