adafruit / RadioHead

A github'ified version of http://www.airspayce.com/mikem/arduino/RadioHead/
Other
186 stars 115 forks source link

RH_ASK: Guru Meditation Error: Core 1 panic'ed (Cache disabled but cached memory region accessed) ESP32 VSC Platformio #39

Open petervflocke opened 4 years ago

petervflocke commented 4 years ago

RH_ASK together with WiFi in some cases leads to Guru Meditation Error (Cache disabled but cached memory region accessed) Solution: add ESP32 handling #define INTERRUPT_ATTR IRAM_ATTR for RH_PLATFORM == RH_PLATFORM_ESP32 by changing in RH_ASK.cpp file

FROM:

#if (RH_PLATFORM == RH_PLATFORM_ESP8266)
    // interrupt handler and related code must be in RAM on ESP8266,
    // according to issue #46.
    #define INTERRUPT_ATTR ICACHE_RAM_ATTR
#else
    #define INTERRUPT_ATTR
#endif

TO:

#if (RH_PLATFORM == RH_PLATFORM_ESP8266)
    // interrupt handler and related code must be in RAM on ESP8266,
    // according to issue #46.
    #define INTERRUPT_ATTR ICACHE_RAM_ATTR
#elif (RH_PLATFORM == RH_PLATFORM_ESP32)
    #define INTERRUPT_ATTR IRAM_ATTR 
#else
    #define INTERRUPT_ATTR
#endif

If this is a correct way to solve it, please include in your next version. (For me it solved it, I can observer a stable run for some longer time) By the way I do expect same problem (and solution) for the module CC110, which I want o use in the next (hardware) release in my project.

A more detailed description is here: https://github.com/espressif/arduino-esp32/issues/3634

Best Peter

petervflocke commented 4 years ago

Update: I needed to add DRAM_ATTR to the table symbols[] definition. This and the latter change are done in RH_ASK.cpp.

// :PP: added DRAM_ATTR
#if (RH_PLATFORM == RH_PLATFORM_ESP8266)
    #define D_A DRAM_ATTR
#elif (RH_PLATFORM == RH_PLATFORM_ESP32)
    #define D_A DRAM_ATTR  
#else
    #define D_A 
#endif

D_A static uint8_t symbols[] =
{
    0xd,  0xe,  0x13, 0x15, 0x16, 0x19, 0x1a, 0x1c, 
    0x23, 0x25, 0x26, 0x29, 0x2a, 0x2c, 0x32, 0x34
};

Kindly ask you to verify and confirm that this is fine from your point of view. After both changes I haven't observed any further guru mediation.

rkopka42 commented 4 years ago

The DRAM_ATTR part was what really helped me. The IRAM part was already inside the lib, but I still got the Cache panics regularily and I only looked inside the code part.