原来的复位代码如下:
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");#endifCmdFwErase();#if defined(_DEBUG_) || defined(_SYD_RTT_DEBUG_)dbg_printf("OTA start\r\n");#endifota_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");#endifTimer_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");#endifdelay_ms(1000);#if defined(_DEBUG_) || defined(_SYD_RTT_DEBUG_)dbg_printf("Start Reset 1000s\r\n");#endifSystemReset();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");#endifCmdFwErase();#if defined(_DEBUG_) || defined(_SYD_RTT_DEBUG_)dbg_printf("OTA start\r\n");#endifota_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");#endifTimer_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");#endifdelay_ms(1000);#if defined(_DEBUG_) || defined(_SYD_RTT_DEBUG_)dbg_printf("Start Reset 1000s\r\n");#endifSystemReset();__disable_irq(); delay_ms(3000);__enable_irq(); break;default :break;}}#endif
}
OTA成功如下: