ESP8266 Developer Zone The Official ESP8266 Forum 2016-06-22T14:05:35+08:00 https://bbs.espressif.com:443/feed.php?f=7&t=2322 2016-06-22T14:05:35+08:00 2016-06-22T14:05:35+08:00 https://bbs.espressif.com:443/viewtopic.php?t=2322&p=7465#p7465 <![CDATA[Re: FOTA的定时器回调中关闭socket导致崩溃重启]]>
Espressif_Faye wrote:
您好,

基于 ESP8266_RTOS_SDK 的 FOTA 示例,您可以参考 https://github.com/espressif/ESP8266_IOT_PLATFORM/tree/master/upgrade

感谢您对 ESP8266 的关注!


Hi Faye,
你好。
我就是参考了https://github.com/espressif/ESP8266_IOT_PLATFORM/tree/master/upgrade,它里面就有为fota任务起一个超时定时器,但是我实际测算发现这个定时器超时会导致系统崩溃重启。
你可以帮忙看看我附件中所带的代码吗?谢谢

Regards
Bobby

Statistics: Posted by bobby_jiang — Wed Jun 22, 2016 2:05 pm


]]>
2016-06-22T09:50:10+08:00 2016-06-22T09:50:10+08:00 https://bbs.espressif.com:443/viewtopic.php?t=2322&p=7455#p7455 <![CDATA[Re: FOTA的定时器回调中关闭socket导致崩溃重启]]>
基于 ESP8266_RTOS_SDK 的 FOTA 示例,您可以参考 https://github.com/espressif/ESP8266_IOT_PLATFORM/tree/master/upgrade

感谢您对 ESP8266 的关注!

Statistics: Posted by ESP_Faye — Wed Jun 22, 2016 9:50 am


]]>
2016-06-21T21:38:55+08:00 2016-06-21T21:38:55+08:00 https://bbs.espressif.com:443/viewtopic.php?t=2322&p=7450#p7450 <![CDATA[FOTA的定时器回调中关闭socket导致崩溃重启]]> 我用的SDK是RTOS 1.4.0版本的SDK。
我是按照IOT platform的例子和《RTOS SDK编程手册》的说明,为fota任务起了一个定时器,如果超时没有完成fota,就由定时器回调关闭fota任务和socket连接。
ret=xTaskCreate(fota_task, "fota task", 512, NULL, 2 , &xFotaCmdTaskHandle);
if(pdPASS == ret){
os_timer_disarm(&upgrade_timer);
os_timer_setfn(&upgrade_timer, (os_timer_func_t *)upgrade_check, &timer_param);
os_timer_arm(&upgrade_timer, FOTA_TIME_MAX, 0);
}

但是,我发现在回调upgrade_check()中无法关闭在fota任务中创建的socket,并且会导致程序崩溃重启。
void upgrade_check(void *parm)
{
int ret;
/*network not stable, upgrade data lost, this may be called*/
os_timer_disarm(&upgrade_timer);
fotaNewFwReady = 0;
system_upgrade_flag_set(UPGRADE_FLAG_IDLE);
if(fota_socket>0){
ret=closesocket(fota_socket);
if(ret!=0){
printf("timer callback::close socket failed!\r\n");
}
fota_socket=0;
}
if(xFotaCmdTaskHandle!=NULL){
vTaskDelete(xFotaCmdTaskHandle);
xFotaCmdTaskHandle=NULL;
}
/*take too long to finish,fail*/

printf("\ntimer callback:: upgrade fail,exit.\n");
return;
}

Regards
Bobby
update.rar

Statistics: Posted by bobby_jiang — Tue Jun 21, 2016 9:38 pm


]]>