RTOS task to save value in EEPROM on core 1 always resets ESP32

peter_magdy
Posts: 3
Joined: Mon Mar 23, 2020 11:04 am

RTOS task to save value in EEPROM on core 1 always resets ESP32

Postby peter_magdy » Mon Mar 23, 2020 11:31 am

Hi, I'm working on a project which uses 3 RTOS tasks, it works fine but when I add a new task that saves
a uint32 variable to the EEPROM every 5 seconds, ESP32 always reset, even when I init only this task and
delete the other 3 tasks.

And when I delete this task and add its code in another task, it works well.

In addition to, I call the function "save_dose_counts()" somewhere else in the code and it also works well.

This is the code implementation.



uint16_t dose_addr = 505;
uint32_t dose_counter = 60;

void tasks_init()
{
// xTaskCreatePinnedToCore(stepper_task, "STEEPER", 1000, NULL,
// 3, &stepper_task_handler, 0);

// xTaskCreatePinnedToCore(lcd_task, "LCD", 10000, NULL,
// 3, NULL, 1);

// xTaskCreatePinnedToCore(alarms_task, "ALARMS", 10000, NULL,
// 2, NULL, 1);

xTaskCreatePinnedToCore(dose_count_task, "DOSE_COUNT", 1000, NULL,
1, NULL, 1);
}

void dose_count_task(void *pvParameters)
{
for( ;; )
{
while(external_trigger_flag)delay(1);
save_dose_counts();
delay(5000);
}
vTaskDelete(NULL); /* Passing NULL will cause the calling task to be deleted */
}

void save_dose_counts()
{
EEPROM.begin(512);
EEPROM.put(dose_addr, dose_counter);
EEPROM.commit();
}



AND when I replace the code of this task with a blinky one,
it also works well without any reset.


output from the serial:

Guru Meditation Error: Core 1 panic'ed (Unhandled debug exception)
Debug exception reason: Stack canary watchpoint triggered (DOSE_COUNT)
Core 1 register dump:
PC : 0x400885ef PS : 0x00060e36 A0 : 0x80088794 A1 : 0x3ffb8990
A2 : 0x3ffba8bc A3 : 0x00000000 A4 : 0xffffffff A5 : 0x00000000
A6 : 0x000000ff A7 : 0x3ffb8bbc A8 : 0x8008976d A9 : 0x3ffb89a0
A10 : 0x00000003 A11 : 0x00060e23 A12 : 0x00060e20 A13 : 0x00000025
A14 : 0x00000002 A15 : 0x3ffb8bbc SAR : 0x00000008 EXCCAUSE: 0x00000001
EXCVADDR: 0x00000000 LBEG : 0x40001609 LEND : 0x4000160d LCOUNT : 0x00000000

ELF file SHA256: 0000000000000000000000000000000000000000000000000000000000000000

Backtrace: 0x400885ef:0x3ffb8990 0x40088791:0x3ffb89d0 0x400e2720:0x3ffb89f0 0x40083f2f:0x3ffb8a10 0x400844ad:0x3ffb8a30 0x400e5bad:0x3ffb8aa0 0x400e445d:0x3ffb8ac0 0x400e48ab:0x3ffb8ae0 0x400e3241:0x3ffb8b50 0x400e3d24:0x3ffb8ba0 0x400e2885:0x3ffb8c00 0x400e2d71:0x3ffb8c40 0x400d1fe4:0x3ffb8c60 0x400d1a8e:0x3ffb8c90 0x40088921:0x3ffb8cc0

Rebooting...
ets Jun 8 2016 00:22:57

rst:0xc (SW_CPU_RESET),boot:0x13 (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:1
load:0x3fff0018,len:4
load:0x3fff001c,len:1044
load:0x40078000,len:8896
load:0x40080400,len:5816
entry 0x400806ac

ESP_Sprite
Posts: 3262
Joined: Thu Nov 26, 2015 4:08 am

Re: RTOS task to save value in EEPROM on core 1 always resets ESP32

Postby ESP_Sprite » Mon Mar 23, 2020 6:29 pm

Code: Select all

 Debug exception reason: Stack canary watchpoint triggered (DOSE_COUNT) 
 
This effectively tells you that the stack size for that task is too low. Increase it and it should start working.

peter_magdy
Posts: 3
Joined: Mon Mar 23, 2020 11:04 am

Re: RTOS task to save value in EEPROM on core 1 always resets ESP32

Postby peter_magdy » Tue Mar 24, 2020 8:38 am

Very good, it worked well when i increased the stack size of the task from 1000 to 10000, and value is correctly saved.

Thank you, ESP_Sprite :)

But how to know the required stack size for the task ??
like for this example:
  1. void save_dose_counts()
  2. {
  3.     EEPROM.begin(512);
  4.     EEPROM.put(dose_addr, dose_counter);
  5.     EEPROM.commit();
  6. }

ESP_Sprite
Posts: 3262
Joined: Thu Nov 26, 2015 4:08 am

Re: RTOS task to save value in EEPROM on core 1 always resets ESP32

Postby ESP_Sprite » Tue Mar 24, 2020 1:58 pm

Either you can just use trial and error, or you can use the uxTaskGetStackHighWaterMark() function at the end of the task to figure out how far away from a stack overflow you were.

peter_magdy
Posts: 3
Joined: Mon Mar 23, 2020 11:04 am

Re: RTOS task to save value in EEPROM on core 1 always resets ESP32

Postby peter_magdy » Thu Mar 26, 2020 8:46 am

wow, it worked well.

Thank you for your help.

Who is online

Users browsing this forum: Baidu [Spider], Google [Bot] and 41 guests