FOTA的定时器回调中关闭socket导致崩溃重启

bobby_jiang
Posts: 27
Joined: Tue Sep 29, 2015 4:27 pm

FOTA的定时器回调中关闭socket导致崩溃重启

Postby bobby_jiang » Tue Jun 21, 2016 9:38 pm

Hi ,
我用的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
Attachments
update.rar
(3.79 KiB) Downloaded 585 times

ESP_Faye
Posts: 1646
Joined: Mon Oct 27, 2014 11:08 am

Re: FOTA的定时器回调中关闭socket导致崩溃重启

Postby ESP_Faye » Wed Jun 22, 2016 9:50 am

您好,

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

感谢您对 ESP8266 的关注!

bobby_jiang
Posts: 27
Joined: Tue Sep 29, 2015 4:27 pm

Re: FOTA的定时器回调中关闭socket导致崩溃重启

Postby bobby_jiang » Wed Jun 22, 2016 2:05 pm

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

Who is online

Users browsing this forum: No registered users and 290 guests