Page 1 of 2

reason for watchdog trigger.

Posted: Tue Dec 12, 2017 7:15 am
by kishan patel
Hello,
I have some querry about watchdog.
I have using esp-wroom-32 and sometimes i got that my system is hang-up.
When i have checking debug print,i find something as below:

Task watchdog got triggered. The following tasks did not feed the watchdog in time:
Tasks currently running:
CPU 0: main

So,when this type of debug occur.
How can i solved that?
Please,tell me if any issue or any configuration steps required.

Re: reason for watchdog trigger.

Posted: Tue Dec 12, 2017 2:23 pm
by f.h-f.s.
Can you post your main task?
Probably your app_main()

Re: reason for watchdog trigger.

Posted: Wed Dec 13, 2017 5:13 am
by kishan patel
Thanks for reply,
I can send main task.But it is around 2000 lines.So,i am tell process what i have doing.

Initialize all thing before doing any process.
Initialize uart,
Initialize PWM for buzzer,
Initialize wifi,
Initialize ble,
Initialize timer,
Initialize ADC.

I have get some data and send to the server.

In which process you think about WATCHDOG issue,i will send code for that thing like as any wrong to initialize or something.

Re: reason for watchdog trigger.

Posted: Wed Dec 13, 2017 6:54 am
by chegewara
This is what i would do:
- spread ESP_LOG every few lines to find out approximatly where this watchdog occurs
- then find exactly line that causing watchdog triggering

Its some work with 2000 lines but in 1-2 hours you can find it out

Re: reason for watchdog trigger.

Posted: Wed Dec 13, 2017 7:35 am
by kishan patel
I am sending log.
Please check it.

[0;32mI (6580427) WIFI >> DEBUG-PRINT: Connected to AP[0m
[0;32mI (6580433) WIFI >> DEBUG-PRINT: DNS lookup succeeded. IP=13.58.4.12[0m
[0;32mI (6580440) WIFI >> DEBUG-PRINT:
socket_id = 0
[0m
[0;32mI (6580445) WIFI >> DEBUG-PRINT: ... allocated socket

[0m
I (6581101) wifi: active cnt: 16
[0;32mI (6581486) WIFI >> DEBUG-PRINT: ... connected[0m
[0;32mI (6581488) WIFI >> DEBUG-PRINT: ... socket send success[0m
ets Jun 8 2016 00:22:57

rst:0x8 (TG1WDT_SYS_RESET),boot:0x12 (SPI_FAST_FLASH_BOOT)
configsip: 0, SPIWP:0xee
clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
mode:DIO, clock div:2
load:0x3fff0010,len:4
load:0x3fff0014,len:4252
load:0x40078000,len:0
load:0x40078000,len:11016
entry 0x40078be8
[0;33mW (89) boot: PRO CPU has been reset by WDT.[0m
[0;33mW (89) boot: WDT reset info: PRO CPU PC=0x400884ed[0m
[0;33mW (90) boot: WDT reset info: APP CPU PC=0xd7fdbefa[0m
[0;32mI (1132) heap_init: Initializing. RAM available for dynamic allocation:[0m
[0;32mI (1132) heap_init: At 3FFAFF10 len 000000F0 (0 KiB): DRAM[0m
[0;32mI (1139) heap_init: At 3FFD2170 len 0000DE90 (55 KiB): DRAM[0m
[0;32mI (1158) heap_init: At 3FFE0440 len 00003BC0 (14 KiB): D/IRAM[0m
[0;32mI (1178) heap_init: At 3FFE4350 len 0001BCB0 (111 KiB): D/IRAM[0m
[0;32mI (1198) heap_init: At 40094708 len 0000B8F8 (46 KiB): IRAM[0m
[0;31mE (1257) MAIN >> DEBUG-PRINT:
...................TASK INVALID...................
[0m
E (1257) wifi: esp_wifi_stop 801 wifi is not init
ets Jun 8 2016 00:22:57

rst:0xc (SW_CPU_RESET),boot:0x12 (SPI_FAST_FLASH_BOOT)
configsip: 0, SPIWP:0xee
clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
mode:DIO, clock div:2
load:0x3fff0010,len:4
load:0x3fff0014,len:4252
load:0x40078000,len:0
load:0x40078000,len:11016
entry 0x40078be8
[0;32mI (1068) heap_init: Initializing. RAM available for dynamic allocation:[0m
[0;32mI (1069) heap_init: At 3FFAFF10 len 000000F0 (0 KiB): DRAM[0m
[0;32mI (1075) heap_init: At 3FFD2170 len 0000DE90 (55 KiB): DRAM[0m
[0;32mI (1095) heap_init: At 3FFE0440 len 00003BC0 (14 KiB): D/IRAM[0m
[0;32mI (1114) heap_init: At 3FFE4350 len 0001BCB0 (111 KiB): D/IRAM[0m
[0;32mI (1134) heap_init: At 40094708 len 0000B8F8 (46 KiB): IRAM[0m
[0;31mE (1193) MAIN >> DEBUG-PRINT:
...................TASK SOFTWARE_RESET...................
[0m
[0;32mI (1194) MAIN >> DEBUG-PRINT:
after software reset
car_battery_voltage = 0.000000
[0m
ets Jun 8 2016 00:22:57

rst:0x5 (DEEPSLEEP_RESET),boot:0x12 (SPI_FAST_FLASH_BOOT)
configsip: 0, SPIWP:0xee
clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
mode:DIO, clock div:2
load:0x3fff0010,len:4
load:0x3fff0014,len:4252
load:0x40078000,len:0
load:0x40078000,len:11016
entry 0x40078be8
[0;32mI (1069) heap_init: Initializing. RAM available for dynamic allocation:[0m
[0;32mI (1069) heap_init: At 3FFAFF10 len 000000F0 (0 KiB): DRAM[0m
[0;32mI (1076) heap_init: At 3FFD2170 len 0000DE90 (55 KiB): DRAM[0m
[0;32mI (1095) heap_init: At 3FFE0440 len 00003BC0 (14 KiB): D/IRAM[0m
[0;32mI (1115) heap_init: At 3FFE4350 len 0001BCB0 (111 KiB): D/IRAM[0m
[0;32mI (1135) heap_init: At 40094708 len 0000B8F8 (46 KiB): IRAM[0m
[0;31mE (1194) MAIN >> DEBUG-PRINT:
...................TASK DEEP_SLEEP_RESET...................
[0m
[0;31mE (2495) MAIN >> DEBUG-PRINT:
...................TASK POWER_ON_RESET...................
[0m
[0;33mW (2495) MAIN >> DEBUG-PRINT:
going for board initialization

Here when sending data to server,system was reset.

Re: reason for watchdog trigger.

Posted: Wed Dec 13, 2017 7:51 am
by kishan patel
You can also see the code for sending data to the server.
I think there are some issue.
Here,i have using select function for time_out purpose because read function is blockable.

Code: Select all

void wifi_send_data_kt(char *wifi_data_send)
{
	
	const struct addrinfo hints = {
		.ai_family = AF_INET,
		.ai_socktype = SOCK_STREAM,
	};
	struct addrinfo *res;
	struct in_addr *addr;
	
	int s;
	
	
	fd_set readfds;
	struct timeval tv;
	
	int rv, n;	
	
	char recv_buf[550];
	memset(response_buffer,'\0',strlen(response_buffer));
	
	xEventGroupWaitBits(wifi_event_group, CONNECTED_BIT,false, true, 6000 / portTICK_PERIOD_MS);
	
	#if (defined WIFI_DEBUG_PRINT) && (defined WIFI_LINK_STATUS)
	ESP_LOGI(Display, "Connected to AP");
	#endif

	int err = getaddrinfo(WEB_SERVER,WEB_PORT, &hints, &res);

	if(err == 0 || res != NULL)
	{
		addr = &((struct sockaddr_in *)res->ai_addr)->sin_addr;
		
		#if (defined WIFI_DEBUG_PRINT) && (defined WIFI_SERVER_LINK_STATUS)
		ESP_LOGI(Display, "DNS lookup succeeded. IP=%s", inet_ntoa(*addr));
		#endif

		s = socket(res->ai_family, res->ai_socktype, 0);
		
		#if (defined WIFI_DEBUG_PRINT) && (defined WIFI_SERVER_LINK_STATUS)
		ESP_LOGI(Display,"\nsocket_id = %d\n",s);
		#endif

		if(s >= 0) 
		{		

			FD_ZERO(&readfds);
			FD_SET(s, &readfds);
			n = s + 1;
			
			tv.tv_sec = 2;
			tv.tv_usec = 000000;
	
			#if (defined WIFI_DEBUG_PRINT) && (defined WIFI_SERVER_LINK_STATUS)
			ESP_LOGI(Display, "... allocated socket\r\n");
			#endif
			
			if(connect(s, res->ai_addr, res->ai_addrlen) == 0)
			{
				
				//flags = fcntl(s, F_GETFL, 0); 
				//fcntl(s, F_SETFL, flags | O_NONBLOCK);
				
				#if (defined WIFI_DEBUG_PRINT) && (defined WIFI_SERVER_LINK_STATUS)
				ESP_LOGI(Display, "... connected");
				#endif

				freeaddrinfo(res);

				if (write(s, wifi_data_send, strlen(wifi_data_send)) >= 0) 
				{
					#if (defined WIFI_DEBUG_PRINT) && (defined WIFI_SERVER_LINK_STATUS)
					ESP_LOGI(Display, "... socket send success");
					#endif
					
					do{
						rv = select(n, &readfds, NULL, NULL, &tv);
					
						if (rv > 0) 
						{
							if (FD_ISSET(s, &readfds)) 
							{
								bzero(recv_buf, sizeof(recv_buf));
						   
								read(s, recv_buf, sizeof(recv_buf)-1);
						  
								strcat(response_buffer,recv_buf);
							}
						}
					}while(rv>0);

					
					#if (defined WIFI_DEBUG_PRINT) && (defined WIFI_SERVER_RESPONSE)
					ESP_LOGI(Display,"\nresponse_buffer=%s\n",response_buffer);
					#endif
					
					//#if (defined WIFI_DEBUG_PRINT) && (defined WIFI_SERVER_LINK_STATUS)
					//ESP_LOGI(Display, "\n... done reading from socket. Last read return=%d errno=%d\r\n", r, errno );
					//#endif	
	
					//-------check that server has saved client data or not-------//
						if(strstr(response_buffer,"data saved"))
						{
							server_saved_data_flag = True;
							
						//	#ifdef TEST_CASES_INDICATION
							indicate_server_communication_done_kt();
						//	#endif
							
						
						}
						else
						{
							server_saved_data_flag = False;
							
							#ifdef TEST_CASES_INDICATION
							indicate_server_communication_issue_kt();
							#endif
						}
					//------------------------------------------------------------//
					
					if(strstr(response_buffer,"deactivated"))
					{
						#if (defined WIFI_DEBUG_PRINT) && (defined WIFI_SERVER_RESPONSE)
						ESP_LOGE(Display,"\nsystem is deactivated\n");
						#endif
						
						paired_tags_status = DEACTIVATED;
						
						system_software_reset_kt();
					}
					else
						paired_tags_status = ACTIVATED;
				}
				else
				{
					#ifdef TEST_CASES_INDICATION
					indicate_server_communication_issue_to_write_kt();
					#endif
					
					server_saved_data_flag = False;			//	server has been not saved client data 
				}
			}
			else
			{
				#ifdef TEST_CASES_INDICATION
				indicate_server_connection_issue_kt();
				#endif
				
				server_saved_data_flag = False;			//	server has been not saved client data

				
			}
		}
		else
			server_saved_data_flag = False;				//	server has been not saved client data
		
		close(s);
	}
	else
	{
		server_saved_data_flag = False;					//	server has been not saved client data
		
		freeaddrinfo(res);
		
		
	}
}

Re: reason for watchdog trigger.

Posted: Wed Dec 13, 2017 7:55 am
by WiFive
Add some debug to the do while loop

Re: reason for watchdog trigger.

Posted: Wed Dec 13, 2017 9:19 am
by kishan patel
okay,i have added debug print in do while loop.

Some time system has hang and when i can try to check debug log,i can see as below:

CPU 0: main
Task watchdog got triggered. The following tasks did not feed the watchdog in time:
Tasks currently running:

so,what should be the reasons behind it.
if any idea please,tell me.

Re: reason for watchdog trigger.

Posted: Mon Dec 18, 2017 1:21 pm
by f.h-f.s.
Your last log msg is "ESP_LOGI(Display, "... socket send success");"

WiFive:
Add some debug to the do while loop
Means this loop:

Code: Select all

do{
rv = select(n, &readfds, NULL, NULL, &tv);

if (rv > 0)
{
if (FD_ISSET(s, &readfds))
{
bzero(recv_buf, sizeof(recv_buf));

read(s, recv_buf, sizeof(recv_buf)-1);

strcat(response_buffer,recv_buf);
}
}
}while(rv>0);
This is a loop that can take a while? if the main task isnt sleeping every once in a while, the WDT task watchdog will reset the device.
If this do while loop doesnt sleep somewhere the WDT will trigger (idk if select or read calls vtaskdelay)

Add printlines to your do while loop to check if the WDT is triggered in that loop, and add a vtaskdelay where the WDT is triggered.
more info on WDT: http://esp-idf.readthedocs.io/en/latest ... /wdts.html

Re: reason for watchdog trigger.

Posted: Tue Dec 19, 2017 4:33 am
by kishan patel
Thanks for reply,
I have added debug print in loop as below:


do{
rv = select(n, &readfds, NULL, NULL, &tv);

#if (defined WIFI_DEBUG_PRINT) && (defined WIFI_SERVER_LINK_STATUS)
ESP_LOGI(Display, "\n\nselect returns= %d\n\n",rv);
#endif

if (rv > 0)
{
if (FD_ISSET(s, &readfds))
{
bzero(recv_buf, sizeof(recv_buf));

read(s, recv_buf, sizeof(recv_buf)-1);

strcat(response_buffer,recv_buf);
}
}
}while(rv>0);



now,log look like as below:

[0m
[0;3Task watchdog got triggered. The following tasks did not feed the watchdog in time:
Tasks currently running:
CPU 0: main
2mI (9681526) WIFI >> DEBUG-PRINT:

select returns= 1

[0m
[0;32mI (9681543) WIFI >> DEBUG-PRINT:

select returns= 1

[0m
[0;32mI (9681549) WIFI >> DEBUG-PRINT:

select returns= 1

[0m
[0;32mI (9681555) WIFI >> DEBUG-PRINT:

select returns= 1

[0m
[0;32mI (9681562) WIFI >> DEBUG-PRINT: