Every few hours -> Guru Meditation Error: Core 0 panic'ed (Interrupt wdt timeout on CPU0)

adam_esp
Posts: 37
Joined: Mon Apr 29, 2019 12:09 pm

Every few hours -> Guru Meditation Error: Core 0 panic'ed (Interrupt wdt timeout on CPU0)

Postby adam_esp » Sat Jan 11, 2020 4:28 pm

ESP32, STA mode, client SNTP, server tcp, server udp, client tcp, pwm, adc, rmt.
CORE DUMP:

Code: Select all

 ===============================================================
==================== ESP32 CORE DUMP START ====================

================== CURRENT THREAD REGISTERS ===================
pc             0x40084c91       0x40084c91 <esp_timer_impl_set_alarm+345>
lbeg           0x4000c2e0       1073791712
lend           0x4000c2f6       1073791734
lcount         0xffffffff       4294967295
sar            0x4      4
ps             0x60624  394788
threadptr      <unavailable>
br             <unavailable>
scompare1      <unavailable>
acclo          <unavailable>
acchi          <unavailable>
m0             <unavailable>
m1             <unavailable>
m2             <unavailable>
m3             <unavailable>
expstate       <unavailable>
f64r_lo        <unavailable>
f64r_hi        <unavailable>
f64s           <unavailable>
fcr            <unavailable>
fsr            <unavailable>
a0             0x40081dc6       1074273734
a1             0x3ffaf9a0       1073412512
a2             0x86000264       -2046819740
a3             0x4      4
a4             0x86009d8c       -2046780020
a5             0x86000264       -2046819740
a6             0x82fffe7f       -2097152385
a7             0x4      4
a8             0xefffffff       -268435457
a9             0x3ff47024       1072984100
a10            0xeffffffe       -268435458
a11            0xa0     160
a12            0x30003e5        50332645
a13            0xf0013790       -268355696
a14            0x60620  394784
a15            0x60023  393251

==================== CURRENT THREAD STACK =====================
#0  0x40084c91 in esp_timer_impl_set_alarm (timestamp=19428016740) at C:/msys32/home/anonymous/esp/esp-idf/components/esp32/esp_timer_esp32.c:239
#1  0x40081dc6 in timer_insert (timer=0x3ffc1844) at C:/msys32/home/anonymous/esp/esp-idf/components/esp_common/src/esp_timer.c:204
#2  0x400d3934 in timer_process_alarm (dispatch_method=<optimized out>) at C:/msys32/home/anonymous/esp/esp-idf/components/esp_common/src/esp_timer.c:284
#3  0x400d39b6 in timer_task (arg=0x0) at C:/msys32/home/anonymous/esp/esp-idf/components/esp_common/src/esp_timer.c:316
#4  0x40090758 in vPortTaskWrapper (pxCode=0x400d398c <timer_task>, pvParameters=0x0) at C:/msys32/home/anonymous/esp/esp-idf/components/freertos/port.c:143

======================== THREADS INFO =========================
  Id   Target Id         Frame
* 1    <main task>       0x40084c91 in esp_timer_impl_set_alarm (timestamp=19428016740) at C:/msys32/home/anonymous/esp/esp-idf/components/esp32/esp_timer_esp32.c:239
  2    process 1         0x4017146e in esp_pm_impl_waiti () at C:/msys32/home/anonymous/esp/esp-idf/components/esp32/pm_esp32.c:484
  3    process 2         0x4017146e in esp_pm_impl_waiti () at C:/msys32/home/anonymous/esp/esp-idf/components/esp32/pm_esp32.c:484
  4    process 3         0x40081d20 in esp_crosscore_int_send_yield (core_id=0) at C:/msys32/home/anonymous/esp/esp-idf/components/esp32/crosscore_int.c:111
  5    process 4         0x40081d20 in esp_crosscore_int_send_yield (core_id=0) at C:/msys32/home/anonymous/esp/esp-idf/components/esp32/crosscore_int.c:111
  6    process 5         0x40081d20 in esp_crosscore_int_send_yield (core_id=0) at C:/msys32/home/anonymous/esp/esp-idf/components/esp32/crosscore_int.c:111
  7    process 6         0x40081d20 in esp_crosscore_int_send_yield (core_id=0) at C:/msys32/home/anonymous/esp/esp-idf/components/esp32/crosscore_int.c:111
  8    process 7         0x40081d20 in esp_crosscore_int_send_yield (core_id=0) at C:/msys32/home/anonymous/esp/esp-idf/components/esp32/crosscore_int.c:111
  9    process 8         0x40081d20 in esp_crosscore_int_send_yield (core_id=0) at C:/msys32/home/anonymous/esp/esp-idf/components/esp32/crosscore_int.c:111
  10   process 9         0x40081d20 in esp_crosscore_int_send_yield (core_id=0) at C:/msys32/home/anonymous/esp/esp-idf/components/esp32/crosscore_int.c:111
  11   process 10        0x40081d20 in esp_crosscore_int_send_yield (core_id=0) at C:/msys32/home/anonymous/esp/esp-idf/components/esp32/crosscore_int.c:111
  12   process 11        0x40081d20 in esp_crosscore_int_send_yield (core_id=0) at C:/msys32/home/anonymous/esp/esp-idf/components/esp32/crosscore_int.c:111
  13   process 12        0x40081d20 in esp_crosscore_int_send_yield (core_id=0) at C:/msys32/home/anonymous/esp/esp-idf/components/esp32/crosscore_int.c:111
  14   process 13        0x40081d20 in esp_crosscore_int_send_yield (core_id=0) at C:/msys32/home/anonymous/esp/esp-idf/components/esp32/crosscore_int.c:111
  15   process 14        0x40081d20 in esp_crosscore_int_send_yield (core_id=0) at C:/msys32/home/anonymous/esp/esp-idf/components/esp32/crosscore_int.c:111
  16   process 15        0x40081d20 in esp_crosscore_int_send_yield (core_id=0) at C:/msys32/home/anonymous/esp/esp-idf/components/esp32/crosscore_int.c:111
  17   process 16        xEventGroupWaitBits (xEventGroup=0x3ffd27f8, uxBitsToWaitFor=3, xClearOnExit=0, xWaitForAllBits=0, xTicksToWait=4294967295) at C:/msys32/home/anonymous/esp/esp-idf/components/freertos/event_groups.c:445
  18   process 17        0x40091124 in xQueueGenericReceive (xQueue=0x3ffaff84, pvBuffer=0x0, xTicksToWait=<optimized out>, xJustPeeking=0) at C:/msys32/home/anonymous/esp/esp-idf/components/freertos/include/freertos/portable.h:214
  19   process 18        0x40081d20 in esp_crosscore_int_send_yield (core_id=0) at C:/msys32/home/anonymous/esp/esp-idf/components/esp32/crosscore_int.c:111
  20   process 19        0x40081d20 in esp_crosscore_int_send_yield (core_id=0) at C:/msys32/home/anonymous/esp/esp-idf/components/esp32/crosscore_int.c:111
  21   process 20        0x40081d20 in esp_crosscore_int_send_yield (core_id=0) at C:/msys32/home/anonymous/esp/esp-idf/components/esp32/crosscore_int.c:111

======================= ALL MEMORY REGIONS ========================
Name   Address   Size   Attrs
.rtc.text 0x400c0000 0x0 RW
.rtc.dummy 0x3ff80000 0x0 RW
.rtc.force_fast 0x3ff80000 0x0 RW
.rtc_noinit 0x50000000 0x0 RW
.rtc.force_slow 0x50000000 0x0 RW
.iram0.vectors 0x40080000 0x400 R XA
.iram0.text 0x40080400 0x12080 RWXA
.dram0.data 0x3ffb0000 0x36e8 RW A
.noinit 0x3ffb36e8 0x0 RW
.flash.rodata 0x3f400020 0x264ac RW A
.flash.text 0x400d0018 0xa3140 R XA
.coredump.tasks.data 0x3ffafab4 0x164 RW
.coredump.tasks.data 0x3ffaf8e0 0x1cc RW
.coredump.tasks.data 0x3ffc00a8 0x164 RW
.coredump.tasks.data 0x3ffbff00 0x1a0 RW
.coredump.tasks.data 0x3ffbf93c 0x164 RW
.coredump.tasks.data 0x3ffbf790 0x1a4 RW
.coredump.tasks.data 0x3ffc2168 0x164 RW
.coredump.tasks.data 0x3ffc1eb0 0x2b0 RW
.coredump.tasks.data 0x3ffc6084 0x164 RW
.coredump.tasks.data 0x3ffc5e50 0x22c RW
.coredump.tasks.data 0x3ffc41c8 0x164 RW
.coredump.tasks.data 0x3ffc4020 0x1a0 RW
.coredump.tasks.data 0x3ffc4720 0x164 RW
.coredump.tasks.data 0x3ffc4550 0x1c8 RW
.coredump.tasks.data 0x3ffc385c 0x164 RW
.coredump.tasks.data 0x3ffc35f0 0x264 RW
.coredump.tasks.data 0x3ffd40cc 0x164 RW
.coredump.tasks.data 0x3ffd3e80 0x244 RW
.coredump.tasks.data 0x3ffd2430 0x164 RW
.coredump.tasks.data 0x3ffd2250 0x1d8 RW
.coredump.tasks.data 0x3ffcdbd0 0x164 RW
.coredump.tasks.data 0x3ffcda00 0x1c8 RW
.coredump.tasks.data 0x3ffd4a38 0x164 RW
.coredump.tasks.data 0x3ffd4860 0x1d0 RW
.coredump.tasks.data 0x3ffbdb14 0x164 RW
.coredump.tasks.data 0x3ffc4f00 0x1c4 RW
.coredump.tasks.data 0x3ffc0b08 0x164 RW
.coredump.tasks.data 0x3ffc0940 0x1c0 RW
.coredump.tasks.data 0x3ffd1ac4 0x164 RW
.coredump.tasks.data 0x3ffd1740 0x37c RW
.coredump.tasks.data 0x3ffd0958 0x164 RW
.coredump.tasks.data 0x3ffd0570 0x3e0 RW
.coredump.tasks.data 0x3ffd6ba4 0x164 RW
.coredump.tasks.data 0x3ffd62b0 0x8ec RW
.coredump.tasks.data 0x3ffbd934 0x164 RW
.coredump.tasks.data 0x3ffbd780 0x1ac RW
.coredump.tasks.data 0x3ffc705c 0x164 RW
.coredump.tasks.data 0x3ffc6e50 0x204 RW
.coredump.tasks.data 0x3ffc8904 0x164 RW
.coredump.tasks.data 0x3ffc86f0 0x20c RW
.coredump.tasks.data 0x3ffafe1c 0x164 RW
.coredump.tasks.data 0x3ffbd360 0x1c8 RW

===================== ESP32 CORE DUMP END =====================
===============================================================
and one more dump:

Code: Select all

===============================================================
==================== ESP32 CORE DUMP START ====================

================== CURRENT THREAD REGISTERS ===================
pc             0x40084c32       0x40084c32 <esp_timer_impl_set_alarm+250>
lbeg           0x4000c2e0       1073791712
lend           0x4000c2f6       1073791734
lcount         0xffffffff       4294967295
sar            0x4      4
ps             0x60924  395556
threadptr      <unavailable>
br             <unavailable>
scompare1      <unavailable>
acclo          <unavailable>
acchi          <unavailable>
m0             <unavailable>
m1             <unavailable>
m2             <unavailable>
m3             <unavailable>
expstate       <unavailable>
f64r_lo        <unavailable>
f64r_hi        <unavailable>
f64s           <unavailable>
fcr            <unavailable>
fsr            <unavailable>
a0             0x40081dc6       1074273734
a1             0x3ffaf9a0       1073412512
a2             0x5500031f       1426064159
a3             0x2      2
a4             0x5502fddf       1426259423
a5             0x5500031f       1426064159
a6             0x51ffff3a       1375731514
a7             0x2      2
a8             0x3ff47024       1072984100
a9             0xf16c1bed       -244573203
a10            0x3ffb8178       1073447288
a11            0xa0     160
a12            0x30003e5        50332645
a13            0xf0013790       -268355696
a14            0x60920  395552
a15            0x60023  393251

==================== CURRENT THREAD STACK =====================
#0  0x40084c32 in esp_timer_impl_set_alarm (timestamp=10015998751) at C:/msys32/home/anonymous/esp/esp-idf/components/esp32/esp_timer_esp32.c:229
#1  0x40081dc6 in timer_insert (timer=0x3ffc1844) at C:/msys32/home/anonymous/esp/esp-idf/components/esp_common/src/esp_timer.c:204
#2  0x400d3934 in timer_process_alarm (dispatch_method=<optimized out>) at C:/msys32/home/anonymous/esp/esp-idf/components/esp_common/src/esp_timer.c:284
#3  0x400d39b6 in timer_task (arg=0x0) at C:/msys32/home/anonymous/esp/esp-idf/components/esp_common/src/esp_timer.c:316
#4  0x40090758 in vPortTaskWrapper (pxCode=0x400d398c <timer_task>, pvParameters=0x0) at C:/msys32/home/anonymous/esp/esp-idf/components/freertos/port.c:143

======================== THREADS INFO =========================
  Id   Target Id         Frame
* 1    <main task>       0x40084c32 in esp_timer_impl_set_alarm (timestamp=10015998751) at C:/msys32/home/anonymous/esp/esp-idf/components/esp32/esp_timer_esp32.c:229
  2    process 1         0x4017146e in esp_pm_impl_waiti () at C:/msys32/home/anonymous/esp/esp-idf/components/esp32/pm_esp32.c:484
  3    process 2         0x4017146e in esp_pm_impl_waiti () at C:/msys32/home/anonymous/esp/esp-idf/components/esp32/pm_esp32.c:484
  4    process 3         0x40081d20 in esp_crosscore_int_send_yield (core_id=0) at C:/msys32/home/anonymous/esp/esp-idf/components/esp32/crosscore_int.c:111
  5    process 4         0x40081d20 in esp_crosscore_int_send_yield (core_id=0) at C:/msys32/home/anonymous/esp/esp-idf/components/esp32/crosscore_int.c:111
  6    process 5         0x40081d20 in esp_crosscore_int_send_yield (core_id=0) at C:/msys32/home/anonymous/esp/esp-idf/components/esp32/crosscore_int.c:111
  7    process 6         0x40081d20 in esp_crosscore_int_send_yield (core_id=0) at C:/msys32/home/anonymous/esp/esp-idf/components/esp32/crosscore_int.c:111
  8    process 7         0x40081d20 in esp_crosscore_int_send_yield (core_id=0) at C:/msys32/home/anonymous/esp/esp-idf/components/esp32/crosscore_int.c:111
  9    process 8         0x40081d20 in esp_crosscore_int_send_yield (core_id=0) at C:/msys32/home/anonymous/esp/esp-idf/components/esp32/crosscore_int.c:111
  10   process 9         0x40081d20 in esp_crosscore_int_send_yield (core_id=0) at C:/msys32/home/anonymous/esp/esp-idf/components/esp32/crosscore_int.c:111
  11   process 10        0x40081d20 in esp_crosscore_int_send_yield (core_id=0) at C:/msys32/home/anonymous/esp/esp-idf/components/esp32/crosscore_int.c:111
  12   process 11        0x40081d20 in esp_crosscore_int_send_yield (core_id=0) at C:/msys32/home/anonymous/esp/esp-idf/components/esp32/crosscore_int.c:111
  13   process 12        0x40081d20 in esp_crosscore_int_send_yield (core_id=0) at C:/msys32/home/anonymous/esp/esp-idf/components/esp32/crosscore_int.c:111
  14   process 13        0x40081d20 in esp_crosscore_int_send_yield (core_id=0) at C:/msys32/home/anonymous/esp/esp-idf/components/esp32/crosscore_int.c:111
  15   process 14        0x40081d20 in esp_crosscore_int_send_yield (core_id=0) at C:/msys32/home/anonymous/esp/esp-idf/components/esp32/crosscore_int.c:111
  16   process 15        0x40091124 in xQueueGenericReceive (xQueue=0x3ffd26a4, pvBuffer=0x3ffd05f4, xTicksToWait=<optimized out>, xJustPeeking=0) at C:/msys32/home/anonymous/esp/esp-idf/components/freertos/include/freertos/portable.h:214
  17   process 16        0x40081d20 in esp_crosscore_int_send_yield (core_id=0) at C:/msys32/home/anonymous/esp/esp-idf/components/esp32/crosscore_int.c:111
  18   process 17        0x40091124 in xQueueGenericReceive (xQueue=0x3ffaff84, pvBuffer=0x0, xTicksToWait=<optimized out>, xJustPeeking=0) at C:/msys32/home/anonymous/esp/esp-idf/components/freertos/include/freertos/portable.h:214
  19   process 18        0x40081d20 in esp_crosscore_int_send_yield (core_id=0) at C:/msys32/home/anonymous/esp/esp-idf/components/esp32/crosscore_int.c:111
  20   process 19        0x40081d20 in esp_crosscore_int_send_yield (core_id=0) at C:/msys32/home/anonymous/esp/esp-idf/components/esp32/crosscore_int.c:111
  21   process 20        0x40081d20 in esp_crosscore_int_send_yield (core_id=0) at C:/msys32/home/anonymous/esp/esp-idf/components/esp32/crosscore_int.c:111

======================= ALL MEMORY REGIONS ========================
Name   Address   Size   Attrs
.rtc.text 0x400c0000 0x0 RW
.rtc.dummy 0x3ff80000 0x0 RW
.rtc.force_fast 0x3ff80000 0x0 RW
.rtc_noinit 0x50000000 0x0 RW
.rtc.force_slow 0x50000000 0x0 RW
.iram0.vectors 0x40080000 0x400 R XA
.iram0.text 0x40080400 0x12080 RWXA
.dram0.data 0x3ffb0000 0x36e8 RW A
.noinit 0x3ffb36e8 0x0 RW
.flash.rodata 0x3f400020 0x264ac RW A
.flash.text 0x400d0018 0xa3140 R XA
.coredump.tasks.data 0x3ffafab4 0x164 RW
.coredump.tasks.data 0x3ffaf8e0 0x1cc RW
.coredump.tasks.data 0x3ffc00a8 0x164 RW
.coredump.tasks.data 0x3ffbff00 0x1a0 RW
.coredump.tasks.data 0x3ffbf93c 0x164 RW
.coredump.tasks.data 0x3ffbf790 0x1a4 RW
.coredump.tasks.data 0x3ffbdb14 0x164 RW
.coredump.tasks.data 0x3ffc4f00 0x1c4 RW
.coredump.tasks.data 0x3ffc5fb8 0x164 RW
.coredump.tasks.data 0x3ffc5d90 0x220 RW
.coredump.tasks.data 0x3ffc41c8 0x164 RW
.coredump.tasks.data 0x3ffc4020 0x1a0 RW
.coredump.tasks.data 0x3ffd2364 0x164 RW
.coredump.tasks.data 0x3ffd2180 0x1dc RW
.coredump.tasks.data 0x3ffc4720 0x164 RW
.coredump.tasks.data 0x3ffc4550 0x1c8 RW
.coredump.tasks.data 0x3ffc385c 0x164 RW
.coredump.tasks.data 0x3ffc35f0 0x264 RW
.coredump.tasks.data 0x3ffd408c 0x164 RW
.coredump.tasks.data 0x3ffd3e40 0x244 RW
.coredump.tasks.data 0x3ffcdb04 0x164 RW
.coredump.tasks.data 0x3ffcd930 0x1cc RW
.coredump.tasks.data 0x3ffd49f8 0x164 RW
.coredump.tasks.data 0x3ffd4820 0x1d0 RW
.coredump.tasks.data 0x3ffc2168 0x164 RW
.coredump.tasks.data 0x3ffc1eb0 0x2b0 RW
.coredump.tasks.data 0x3ffc0b08 0x164 RW
.coredump.tasks.data 0x3ffc0940 0x1c0 RW
.coredump.tasks.data 0x3ffd19f8 0x164 RW
.coredump.tasks.data 0x3ffd1680 0x370 RW
.coredump.tasks.data 0x3ffd088c 0x164 RW
.coredump.tasks.data 0x3ffd04c0 0x3c4 RW
.coredump.tasks.data 0x3ffd6b64 0x164 RW
.coredump.tasks.data 0x3ffd6250 0x90c RW
.coredump.tasks.data 0x3ffbd934 0x164 RW
.coredump.tasks.data 0x3ffbd780 0x1ac RW
.coredump.tasks.data 0x3ffc6f90 0x164 RW
.coredump.tasks.data 0x3ffc6d80 0x208 RW
.coredump.tasks.data 0x3ffc8838 0x164 RW
.coredump.tasks.data 0x3ffc8630 0x200 RW
.coredump.tasks.data 0x3ffafe1c 0x164 RW
.coredump.tasks.data 0x3ffbd360 0x1c8 RW

===================== ESP32 CORE DUMP END =====================
===============================================================

Is this a bug in libraries or something else?
How can I find out the reason for this behavior?

Benoit Roue
Posts: 1
Joined: Mon Mar 30, 2020 6:58 am

Re: Every few hours -> Guru Meditation Error: Core 0 panic'ed (Interrupt wdt timeout on CPU0)

Postby Benoit Roue » Mon Mar 30, 2020 7:13 am

Hi,

ESP-IDF 4.0
I got the same problem. The task calling the esp_timer_impl_set_alarm() trigs the idle task watchdog timeout.

Code: Select all

Guru Meditation Error: Core  0 panic'ed (Interrupt wdt timeout on CPU0)
Core 0 register dump:
PC      : 0x4008a061  PS      : 0x00060234  A0      : 0x800d5558  A1      : 0x3ffb7670
0x4008a061: esp_timer_impl_set_alarm at C:/Developpement/SDK/esp-idf-v4.0/components/esp32/esp_timer_esp32.c:239

A2      : 0xcd011a65  A3      : 0x0000000b  A4      : 0x3ffce0c0  A5      : 0x3ffce0bc
A6      : 0x000000a0  A7      : 0x00000001  A8      : 0xefffffff  A9      : 0x3ff47030
A10     : 0xeffffffe  A11     : 0xf16d357e  A12     : 0xf05979f0  A13     : 0x00000000
A14     : 0x00000000  A15     : 0x3ffc8a48  SAR     : 0x0000001c  EXCCAUSE: 0x00000005
EXCVADDR: 0x00000000  LBEG    : 0x4000c2e0  LEND    : 0x4000c2f6  LCOUNT  : 0xffffffff
It looks like the function esp_timer_impl_set_alarm() stay in an endless do-while loop:

Code: Select all

void IRAM_ATTR esp_timer_impl_set_alarm(uint64_t timestamp)
{
    portENTER_CRITICAL(&s_time_update_lock);
    // Use calculated alarm value if it is less than ALARM_OVERFLOW_VAL.
    // Note that if by the time we update ALARM_REG, COUNT_REG value is higher,
    // interrupt will not happen for another ALARM_OVERFLOW_VAL timer ticks,
    // so need to check if alarm value is too close in the future (e.g. <2 us away).
    const int32_t offset = s_timer_ticks_per_us * 2;
    do {
        // Adjust current time if overflow has happened
        if (timer_overflow_happened()) {
            timer_count_reload();
            s_time_base_us += s_timer_us_per_overflow;
        }
        s_mask_overflow = false;
        int64_t cur_count = REG_READ(FRC_TIMER_COUNT_REG(1));
        // Alarm time relative to the moment when counter was 0
        int64_t time_after_timebase_us = (int64_t)timestamp - s_time_base_us;
        // Calculate desired timer compare value (may exceed 2^32-1)
        int64_t compare_val = time_after_timebase_us * s_timer_ticks_per_us;

        compare_val = MAX(compare_val, cur_count + offset);
        uint32_t alarm_reg_val = ALARM_OVERFLOW_VAL;
        if (compare_val < ALARM_OVERFLOW_VAL) {
            alarm_reg_val = (uint32_t) compare_val;
        }
        REG_WRITE(FRC_TIMER_ALARM_REG(1), alarm_reg_val);
    } while (REG_READ(FRC_TIMER_ALARM_REG(1)) <= REG_READ(FRC_TIMER_COUNT_REG(1)));
    portEXIT_CRITICAL(&s_time_update_lock);
}
ESP-IDF 3.2.3:
Since there is no loop ensuring the alarm time is is set after the current count, we can see the alarms can be set 54s later.
Now, in v4.0 it seems that this bug is fixed by a loop causing a cpu reset, which is a unacceptable workaround.

Benoit

Who is online

Users browsing this forum: Majestic-12 [Bot] and 240 guests