0

I am running a simple program on my ESP32 S3 DevKit C which just reads the data read from the ADC channels and prints them to the monitor. It all runs fine, but then after a few seconds, the readout is interrupted by this error, and then this just keeps repeating itself. (What is interesting is that the error occurs in the middle of printing out the integer 766 and splits up 7 and 66).

Here is the monitor readout:

2094, 767
2095, 767
2093, 767
2099, 7E (50298) task_wdt: Task watchdog got triggered. The following tasks did not reset the watchdog in time:
E (50298) task_wdt:  - IDLE (CPU 0)
E (50298) task_wdt: Tasks currently running:
E (50298) task_wdt: CPU 0: main
E (50298) task_wdt: CPU 1: IDLE
E (50298) task_wdt: Print CPU 0 (current core) backtrace


Backtrace:0x42008262:0x3FC910C00x4037673A:0x3FC910E0 0x4200305A:0x3FCF4250 0x42003EB2:0x3FCF4280 0x42002A95:0x3FCF42A0 0x4200262F:0x3FCF42C0 0x4200A5E5:0x3FCF42E0 0x4201203E:0x3FCF4300 0x420120C6:0x3FCF4320 0x4200A015:0x3FCF4350 0x42015599:0x3FCF4380 0x42010DDF:0x3FCF43A0 0x4200A1B1:0x3FCF46B0 0x42005525:0x3FCF4700 0x42018315:0x3FCF4730 0x4037B759:0x3FCF4750
0x42008262: task_wdt_isr at C:/Espressif/frameworks/esp-idf-v4.4/components/esp_system/task_wdt.c:183 (discriminator 3)

0x4037673a: _xt_lowint1 at C:/Espressif/frameworks/esp-idf-v4.4/components/freertos/port/xtensa/xtensa_vectors.S:1111

0x4200305a: uart_ll_get_txfifo_len at c:\espressif\frameworks\esp-idf-v4.4\projects\esi2022\build/../../../components/hal/esp32s3/include/hal/uart_ll.h:316 (discriminator 1)
 (inlined by) uart_tx_char at C:/Espressif/frameworks/esp-idf-v4.4/components/vfs/vfs_uart.c:156 (discriminator 1)

0x42003eb2: uart_write at C:/Espressif/frameworks/esp-idf-v4.4/components/vfs/vfs_uart.c:209

0x42002a95: console_write at C:/Espressif/frameworks/esp-idf-v4.4/components/vfs/vfs_console.c:73

0x4200262f: esp_vfs_write at C:/Espressif/frameworks/esp-idf-v4.4/components/vfs/vfs.c:431 (discriminator 4)

0x4200a5e5: __swrite at /builds/idf/crosstool-NG/.build/HOST-x86_64-w64-mingw32/xtensa-esp32s3-elf/src/newlib/newlib/libc/stdio/stdio.c:94

0x4201203e: __sflush_r at /builds/idf/crosstool-NG/.build/HOST-x86_64-w64-mingw32/xtensa-esp32s3-elf/src/newlib/newlib/libc/stdio/fflush.c:224

0x420120c6: _fflush_r at /builds/idf/crosstool-NG/.build/HOST-x86_64-w64-mingw32/xtensa-esp32s3-elf/src/newlib/newlib/libc/stdio/fflush.c:278

0x4200a015: __sfvwrite_r at /builds/idf/crosstool-NG/.build/HOST-x86_64-w64-mingw32/xtensa-esp32s3-elf/src/newlib/newlib/libc/stdio/fvwrite.c:251

0x42015599: __sprint_r at /builds/idf/crosstool-NG/.build/HOST-x86_64-w64-mingw32/xtensa-esp32s3-elf/src/newlib/newlib/libc/stdio/vfprintf.c:433
 (inlined by) __sprint_r at /builds/idf/crosstool-NG/.build/HOST-x86_64-w64-mingw32/xtensa-esp32s3-elf/src/newlib/newlib/libc/stdio/vfprintf.c:403

0x42010ddf: _vfprintf_r at /builds/idf/crosstool-NG/.build/HOST-x86_64-w64-mingw32/xtensa-esp32s3-elf/src/newlib/newlib/libc/stdio/vfprintf.c:1781 (discriminator 1)

0x4200a1b1: printf at /builds/idf/crosstool-NG/.build/HOST-x86_64-w64-mingw32/xtensa-esp32s3-elf/src/newlib/newlib/libc/stdio/printf.c:56 (discriminator 5)

0x42005525: app_main at c:\espressif\frameworks\esp-idf-v4.4\projects\esi2022\build/../main/hello_world_main.c:36 (discriminator 1)

0x42018315: main_task at C:/Espressif/frameworks/esp-idf-v4.4/components/freertos/port/port_common.c:129 (discriminator 2)

0x4037b759: vPortTaskWrapper at C:/Espressif/frameworks/esp-idf-v4.4/components/freertos/port/xtensa/port.c:131


E (50298) task_wdt: Print CPU 1 backtrace


Backtrace:0x40377C6D:0x3FC916C00x4037673A:0x3FC916E0 0x400559DD:0x3FCF56B0  |<-CORRUPTED
0x40377c6d: esp_crosscore_isr at C:/Espressif/frameworks/esp-idf-v4.4/components/esp_system/crosscore_int.c:92

0x4037673a: _xt_lowint1 at C:/Espressif/frameworks/esp-idf-v4.4/components/freertos/port/xtensa/xtensa_vectors.S:1111


66
2207, 766
2092, 775
2095, 775
2095, 767
2093, 767
2093, 774
2095, 767

And here is the code I am running:

/* This script creates a representative dataset of audio from the ESP32-S3
   
    TO RUN: >> idf.py set-target esp32s3
           >> idf.py -p COM3 -b 480600 flash monitor

    MAKE SURE SPI FLASH SIZE IS 8MB:
            >> idf.py menuconfig
            >> Serial Flasher Config >> Flash Size (8 MB)
            
*/
#include <stdio.h>
#include <driver/adc.h>
#include "sdkconfig.h"
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "esp_system.h"
#include "esp_spi_flash.h"

void app_main(void)
{   
    printf("Hello world!\n");

    /* Configure desired precision and attenuation for ADC pins
        Right Channel: GPIO 4 ADC1 Channel 3
        Left Channel: GPIO 11 ADC2 Channel 0                  */

    adc1_config_width(ADC_WIDTH_BIT_DEFAULT);
    adc1_config_channel_atten(ADC1_CHANNEL_3,ADC_ATTEN_DB_0);
    adc2_config_channel_atten(ADC2_CHANNEL_0,ADC_ATTEN_DB_0);
    
    int val2 = 0;
    int* pval2 = &val2;
    while(true){
        int val1 = adc1_get_raw(ADC1_CHANNEL_3);
        adc2_get_raw(ADC2_CHANNEL_0,ADC_WIDTH_BIT_DEFAULT,pval2);
        printf("%d, %d\n",val1,val2);
    }

If anyone has any idea why this might be happening I would greatly appreciate it. Thanks!

4
  • 2
    The error says it's a missed task watchdog. Perhaps you're printing so much you fill up the buffer, and then there's no watchdog resets happening in the serial output code? I'd try adding a esp_task_wdt_reset() call in your loop -- put it anywhere in there, but I'd put it before the printf. Commented Apr 4, 2022 at 19:28
  • Another thing you might do: only print out every 100 or 1000 ADC values, or only print when the value changes from a previous reading. That'll cut down the amount of printing, which I think will make things work better. Commented Apr 4, 2022 at 19:30
  • Hello Dave, I tried your suggestions. esp_task_wdt_reset() doesn't work. I don't have whatever library it is in. And printing out every 100 or 1000 values doesn't work either. Same issue comes up. However, while researching the esp_task_wtd_reset() function, I came across vTaskDelay() which fixed the issue. Commented Apr 4, 2022 at 20:06
  • You're not missing libraries, you are missing include headers. #include "freertos/task.h" #include "esp_system.h" #include "esp_task_wdt.h" Commented Apr 5, 2022 at 14:31

1 Answer 1

1

By integrating vTaskDelay(); into the while(true) loop, the issue was fixed. Dave M. Had it correct that the buffer was getting filled up too quickly. This limits the amount of data going into the buffer. (See comments below)

Sign up to request clarification or add additional context in comments.

2 Comments

That was not the problem. The problem is that you had an infinite loop that never yielded the processor so that the watchdog could be serviced. vTaskDelay() yields the processor as is necessary.
@romkey is correct. The issue as indicated by the monitor output's stacktrace is your task watchdog. You either need to 'feed' it regularly, e.g. by calling vTaskDelay, or disable the task watchdog for the idle task by using something like assert(esp_task_wdt_delete(xTaskGetIdleTaskHandle()) == ESP_OK);

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.