If the ISR is placed into IRAM, all constant data used by the ISR and functions called from ISR (including, but not limited to, const char arrays), must be placed into DRAM using DRAM_ATTR.
So:
static const RCSwitch::Protocol proto[]
and
const unsigned int RCSwitch::nSeparationLimit = 4300;
should be changed to:
static const DRAM_ATTR RCSwitch::Protocol proto[]
and
const DRAM_ATTR unsigned int RCSwitch::nSeparationLimit = 4300;
According to the expressif documentation:
If the ISR is placed into IRAM, all constant data used by the ISR and functions called from ISR (including, but not limited to, const char arrays), must be placed into DRAM using DRAM_ATTR.
So:
static const RCSwitch::Protocol proto[] and const unsigned int RCSwitch::nSeparationLimit = 4300;
should be changed to:
static const DRAM_ATTR RCSwitch::Protocol proto[] and const DRAM_ATTR unsigned int RCSwitch::nSeparationLimit = 4300;