-
Notifications
You must be signed in to change notification settings - Fork 13.3k
core 2.7.4 to 3.0.2 problem in interrupt and timer1 #8581
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Comments
Not sure, but it seems very odd why littlefs is in the dump and it's never
called....
…On Tue., May 24, 2022, 12:37 Lionel, ***@***.***> wrote:
Hi
So my project : ESP12E Wemos D1 mini, 4 Mo, core 2.7.4, Sloeber env. on
Windows7
Problem : My code work perfectly with core 2.7.4 and crash with 3.0.2. The
crash is always around the same place : in the interrupt of the timer1. In
short, I made a dimer : when I have the zero cross interrupt, I start the
timer1 to activate the SSR relay for a delay.
I really made hundred of try but always the same problem.
Any ideas are welcome :)
Regards,
Lionel
The relevant code is :
`
#define SSR_TURN_ON_us 50
uint8_t SSR_PIN;
int8_t LED_PIN = -1;
static bool Top_CS_ZC = false;
static volatile bool Tim_Interrupt_Enabled = false;
static volatile bool Is_SSR_enabled = false;
static volatile float SSR_COUNT = 0.0;
// Send SSR pulse after delay
void IRAM_ATTR onTimerSSR(void)
{
if (Is_SSR_enabled)
{
if (Top_CS_ZC)
{
digitalWrite(SSR_PIN, HIGH);
Top_CS_ZC = false;
Timer_SSR.setInterval(SSR_TURN_ON_us);
Timer_SSR.startTimer();
}
else
{
digitalWrite(SSR_PIN, LOW);
if (LED_PIN != -1)
digitalWrite(LED_PIN, HIGH);
}
}
}
// Zero cross was fired
void IRAM_ATTR onZC(void)
{
Count_CS_ZC++;
if (Is_SSR_enabled && Tim_Interrupt_Enabled)
{
if (LED_PIN != -1)
digitalWrite(LED_PIN, LOW);
Top_CS_ZC = true;
Timer_SSR.setInterval(SSR_COUNT);
Timer_SSR.startTimer(); <------------------- here is the line 120
}
}
void IRAM_ATTR startTimer(void)
{
timer1_write(_timerCount);
timer1_enable(TIM_DIV, TIM_EDGE, _loop);
}
`
The dump crash stack is :
0x40101654: interrupt_handler(void*, void*) at
...\esp8266\3.0.2\cores\esp8266\core_esp8266_wiring_digital.cpp line 175
0x4010127c: timer1_isr_handler(void*, void*) at
...\esp8266\3.0.2\cores\esp8266\core_esp8266_timer.cpp line 37 0x401002af:
onTimerSSR() at E:\Sloeber\Sloeber_library\SSR\SSR.cpp line 120 0x40101654:
interrupt_handler(void*, void*) at
...\esp8266\3.0.2\cores\esp8266\core_esp8266_wiring_digital.cpp line 175
0x401012c4: timer1_isr_handler(void*, void*) at
...\esp8266\3.0.2\cores\esp8266\core_esp8266_timer.cpp line 44 0x40101654:
interrupt_handler(void*, void*) at
...\esp8266\3.0.2\cores\esp8266\core_esp8266_wiring_digital.cpp line 175
0x40100fd6: __wrap_spi_flash_read(uint32_t, uint32_t*, size_t) at
...\esp8266\3.0.2\cores\esp8266\core_esp8266_phy.cpp line 309 0x402159c0:
EspClass::flashRead(unsigned int, unsigned int*, unsigned int) at
...\esp8266\3.0.2\cores\esp8266\Esp.cpp line 954 0x40215a47:
EspClass::flashRead(unsigned int, unsigned char*, unsigned int) at
...\esp8266\3.0.2\cores\esp8266\Esp.cpp line 933 0x40100fd6:
__wrap_spi_flash_read(uint32_t, uint32_t*, size_t) at
...\esp8266\3.0.2\cores\esp8266\core_esp8266_phy.cpp line 309 0x402159c0:
EspClass::flashRead(unsigned int, unsigned int*, unsigned int) at
...\esp8266\3.0.2\cores\esp8266\Esp.cpp line 954 0x40215a47:
EspClass::flashRead(unsigned int, unsigned char*, unsigned int) at
...\esp8266\3.0.2\cores\esp8266\Esp.cpp line 933 0x40101654:
interrupt_handler(void*, void*) at
...\esp8266\3.0.2\cores\esp8266\core_esp8266_wiring_digital.cpp line 175
0x40101654: interrupt_handler(void*, void*) at
...\esp8266\3.0.2\cores\esp8266\core_esp8266_wiring_digital.cpp line 175
0x40101578: interrupt_handler(void*, void*) at
...\esp8266\3.0.2\cores\esp8266\core_esp8266_wiring_digital.cpp line 138
0x40211997: littlefs_impl::LittleFSImpl::lfs_flash_read(lfs_config const*,
unsigned int, unsigned int, void*, unsigned int) at
...\esp8266\3.0.2\libraries\LittleFS\src\LittleFS.cpp line 171 0x40101654:
interrupt_handler(void*, void*) at
...\esp8266\3.0.2\cores\esp8266\core_esp8266_wiring_digital.cpp line 175
0x40101638: interrupt_handler(void*, void*) at
...\esp8266\3.0.2\cores\esp8266\core_esp8266_wiring_digital.cpp line 167
0x40211988: littlefs_impl::LittleFSImpl::lfs_flash_read(lfs_config const*,
unsigned int, unsigned int, void*, unsigned int) at
...\esp8266\3.0.2\libraries\LittleFS\src\LittleFS.cpp line 169 0x40101578:
interrupt_handler(void*, void*) at
...\esp8266\3.0.2\cores\esp8266\core_esp8266_wiring_digital.cpp line 138
0x402019db: lfs_dir_fetchmatch at
...\esp8266\3.0.2\libraries\littlefs\lib\littlefs/lfs.c line 975
0x402019c4: lfs_dir_fetchmatch at
...\esp8266\3.0.2\libraries\littlefs\lib\littlefs/lfs.c line 964
0x4021901a: __yield() at
...\esp8266\3.0.2\cores\esp8266\core_esp8266_main.cpp line 116 0x4021a425:
flash_hal_read(unsigned int, unsigned int, unsigned char*) at
...\esp8266\3.0.2\cores\esp8266\flash_hal.cpp line 36 0x402119a6:
littlefs_impl::LittleFSImpl::lfs_flash_read(lfs_config const*, unsigned
int, unsigned int, void*, unsigned int) at
...\esp8266\3.0.2\libraries\LittleFS\src\LittleFS.cpp line 171 0x40201330:
lfs_bd_read at ...\esp8266\3.0.2\libraries\littlefs\lib\littlefs/lfs.c line
101 0x402018a2: lfs_dir_fetchmatch at
...\esp8266\3.0.2\libraries\littlefs\lib\littlefs/lfs.c line 891
0x4021a425: flash_hal_read(unsigned int, unsigned int, unsigned char*) at
...\esp8266\3.0.2\cores\esp8266\flash_hal.cpp line 36 0x40201e90:
lfs_dir_find at ...\esp8266\3.0.2\libraries\littlefs\lib\littlefs/lfs.c
line 1238 0x402020f4: lfs_dir_find_match at
...\esp8266\3.0.2\libraries\littlefs\lib\littlefs/lfs.c line 1140
0x40204262: lfs_file_rawopencfg at
...\esp8266\3.0.2\libraries\littlefs\lib\littlefs/lfs.c line 2472
0x4010095b: umm_free_core(umm_heap_context_t*, void*) at
...\esp8266\3.0.2\cores\esp8266\umm_malloc\umm_malloc.cpp line 549
0x40221370: _strdup_r at /workdir/repo/newlib/newlib/libc/string/strdup_r.c
line 10 0x40204ce9: lfs_file_open at
...\esp8266\3.0.2\libraries\littlefs\lib\littlefs/lfs.c line 5058
0x4021228e: littlefs_impl::LittleFSImpl::open(char const*, fs::OpenMode,
fs::AccessMode) at ...\esp8266\3.0.2\libraries\LittleFS\src\LittleFS.cpp
line 85 0x40101654: interrupt_handler(void*, void*) at
...\esp8266\3.0.2\cores\esp8266\core_esp8266_wiring_digital.cpp line 175
0x40101638: interrupt_handler(void*, void*) at
...\esp8266\3.0.2\cores\esp8266\core_esp8266_wiring_digital.cpp line 167
0x40101578: interrupt_handler(void*, void*) at
...\esp8266\3.0.2\cores\esp8266\core_esp8266_wiring_digital.cpp line 138
—
Reply to this email directly, view it on GitHub
<#8581>, or unsubscribe
<https://github.com/notifications/unsubscribe-auth/ACBV22NEBMAWUXKX2JAZLM3VLUASXANCNFSM5W2F2HJQ>
.
You are receiving this because you are subscribed to this thread.Message
ID: ***@***.***>
|
I see this is only part code, the stack might run out with that many calls
on it :-)
On Tue., May 24, 2022, 12:47 RichardS from ESP8266, <
***@***.***> wrote:
… Not sure, but it seems very odd why littlefs is in the dump and it's never
called....
On Tue., May 24, 2022, 12:37 Lionel, ***@***.***> wrote:
> Hi
>
> So my project : ESP12E Wemos D1 mini, 4 Mo, core 2.7.4, Sloeber env. on
> Windows7
>
> Problem : My code work perfectly with core 2.7.4 and crash with 3.0.2.
> The crash is always around the same place : in the interrupt of the timer1.
> In short, I made a dimer : when I have the zero cross interrupt, I start
> the timer1 to activate the SSR relay for a delay.
>
> I really made hundred of try but always the same problem.
>
> Any ideas are welcome :)
>
> Regards,
> Lionel
>
> The relevant code is :
> `
> #define SSR_TURN_ON_us 50
> uint8_t SSR_PIN;
> int8_t LED_PIN = -1;
> static bool Top_CS_ZC = false;
> static volatile bool Tim_Interrupt_Enabled = false;
> static volatile bool Is_SSR_enabled = false;
> static volatile float SSR_COUNT = 0.0;
>
> // Send SSR pulse after delay
> void IRAM_ATTR onTimerSSR(void)
> {
> if (Is_SSR_enabled)
> {
> if (Top_CS_ZC)
> {
> digitalWrite(SSR_PIN, HIGH);
> Top_CS_ZC = false;
> Timer_SSR.setInterval(SSR_TURN_ON_us);
> Timer_SSR.startTimer();
> }
> else
> {
> digitalWrite(SSR_PIN, LOW);
> if (LED_PIN != -1)
> digitalWrite(LED_PIN, HIGH);
> }
> }
> }
>
> // Zero cross was fired
> void IRAM_ATTR onZC(void)
> {
> Count_CS_ZC++;
>
> if (Is_SSR_enabled && Tim_Interrupt_Enabled)
> {
> if (LED_PIN != -1)
> digitalWrite(LED_PIN, LOW);
>
> Top_CS_ZC = true;
> Timer_SSR.setInterval(SSR_COUNT);
> Timer_SSR.startTimer(); <------------------- here is the line 120
> }
>
> }
>
> void IRAM_ATTR startTimer(void)
> {
> timer1_write(_timerCount);
> timer1_enable(TIM_DIV, TIM_EDGE, _loop);
> }
>
> `
>
> The dump crash stack is :
> 0x40101654: interrupt_handler(void*, void*) at
> ...\esp8266\3.0.2\cores\esp8266\core_esp8266_wiring_digital.cpp line 175
> 0x4010127c: timer1_isr_handler(void*, void*) at
> ...\esp8266\3.0.2\cores\esp8266\core_esp8266_timer.cpp line 37 0x401002af:
> onTimerSSR() at E:\Sloeber\Sloeber_library\SSR\SSR.cpp line 120 0x40101654:
> interrupt_handler(void*, void*) at
> ...\esp8266\3.0.2\cores\esp8266\core_esp8266_wiring_digital.cpp line 175
> 0x401012c4: timer1_isr_handler(void*, void*) at
> ...\esp8266\3.0.2\cores\esp8266\core_esp8266_timer.cpp line 44 0x40101654:
> interrupt_handler(void*, void*) at
> ...\esp8266\3.0.2\cores\esp8266\core_esp8266_wiring_digital.cpp line 175
> 0x40100fd6: __wrap_spi_flash_read(uint32_t, uint32_t*, size_t) at
> ...\esp8266\3.0.2\cores\esp8266\core_esp8266_phy.cpp line 309 0x402159c0:
> EspClass::flashRead(unsigned int, unsigned int*, unsigned int) at
> ...\esp8266\3.0.2\cores\esp8266\Esp.cpp line 954 0x40215a47:
> EspClass::flashRead(unsigned int, unsigned char*, unsigned int) at
> ...\esp8266\3.0.2\cores\esp8266\Esp.cpp line 933 0x40100fd6:
> __wrap_spi_flash_read(uint32_t, uint32_t*, size_t) at
> ...\esp8266\3.0.2\cores\esp8266\core_esp8266_phy.cpp line 309 0x402159c0:
> EspClass::flashRead(unsigned int, unsigned int*, unsigned int) at
> ...\esp8266\3.0.2\cores\esp8266\Esp.cpp line 954 0x40215a47:
> EspClass::flashRead(unsigned int, unsigned char*, unsigned int) at
> ...\esp8266\3.0.2\cores\esp8266\Esp.cpp line 933 0x40101654:
> interrupt_handler(void*, void*) at
> ...\esp8266\3.0.2\cores\esp8266\core_esp8266_wiring_digital.cpp line 175
> 0x40101654: interrupt_handler(void*, void*) at
> ...\esp8266\3.0.2\cores\esp8266\core_esp8266_wiring_digital.cpp line 175
> 0x40101578: interrupt_handler(void*, void*) at
> ...\esp8266\3.0.2\cores\esp8266\core_esp8266_wiring_digital.cpp line 138
> 0x40211997: littlefs_impl::LittleFSImpl::lfs_flash_read(lfs_config const*,
> unsigned int, unsigned int, void*, unsigned int) at
> ...\esp8266\3.0.2\libraries\LittleFS\src\LittleFS.cpp line 171 0x40101654:
> interrupt_handler(void*, void*) at
> ...\esp8266\3.0.2\cores\esp8266\core_esp8266_wiring_digital.cpp line 175
> 0x40101638: interrupt_handler(void*, void*) at
> ...\esp8266\3.0.2\cores\esp8266\core_esp8266_wiring_digital.cpp line 167
> 0x40211988: littlefs_impl::LittleFSImpl::lfs_flash_read(lfs_config const*,
> unsigned int, unsigned int, void*, unsigned int) at
> ...\esp8266\3.0.2\libraries\LittleFS\src\LittleFS.cpp line 169 0x40101578:
> interrupt_handler(void*, void*) at
> ...\esp8266\3.0.2\cores\esp8266\core_esp8266_wiring_digital.cpp line 138
> 0x402019db: lfs_dir_fetchmatch at
> ...\esp8266\3.0.2\libraries\littlefs\lib\littlefs/lfs.c line 975
> 0x402019c4: lfs_dir_fetchmatch at
> ...\esp8266\3.0.2\libraries\littlefs\lib\littlefs/lfs.c line 964
> 0x4021901a: __yield() at
> ...\esp8266\3.0.2\cores\esp8266\core_esp8266_main.cpp line 116 0x4021a425:
> flash_hal_read(unsigned int, unsigned int, unsigned char*) at
> ...\esp8266\3.0.2\cores\esp8266\flash_hal.cpp line 36 0x402119a6:
> littlefs_impl::LittleFSImpl::lfs_flash_read(lfs_config const*, unsigned
> int, unsigned int, void*, unsigned int) at
> ...\esp8266\3.0.2\libraries\LittleFS\src\LittleFS.cpp line 171 0x40201330:
> lfs_bd_read at ...\esp8266\3.0.2\libraries\littlefs\lib\littlefs/lfs.c line
> 101 0x402018a2: lfs_dir_fetchmatch at
> ...\esp8266\3.0.2\libraries\littlefs\lib\littlefs/lfs.c line 891
> 0x4021a425: flash_hal_read(unsigned int, unsigned int, unsigned char*) at
> ...\esp8266\3.0.2\cores\esp8266\flash_hal.cpp line 36 0x40201e90:
> lfs_dir_find at ...\esp8266\3.0.2\libraries\littlefs\lib\littlefs/lfs.c
> line 1238 0x402020f4: lfs_dir_find_match at
> ...\esp8266\3.0.2\libraries\littlefs\lib\littlefs/lfs.c line 1140
> 0x40204262: lfs_file_rawopencfg at
> ...\esp8266\3.0.2\libraries\littlefs\lib\littlefs/lfs.c line 2472
> 0x4010095b: umm_free_core(umm_heap_context_t*, void*) at
> ...\esp8266\3.0.2\cores\esp8266\umm_malloc\umm_malloc.cpp line 549
> 0x40221370: _strdup_r at /workdir/repo/newlib/newlib/libc/string/strdup_r.c
> line 10 0x40204ce9: lfs_file_open at
> ...\esp8266\3.0.2\libraries\littlefs\lib\littlefs/lfs.c line 5058
> 0x4021228e: littlefs_impl::LittleFSImpl::open(char const*, fs::OpenMode,
> fs::AccessMode) at ...\esp8266\3.0.2\libraries\LittleFS\src\LittleFS.cpp
> line 85 0x40101654: interrupt_handler(void*, void*) at
> ...\esp8266\3.0.2\cores\esp8266\core_esp8266_wiring_digital.cpp line 175
> 0x40101638: interrupt_handler(void*, void*) at
> ...\esp8266\3.0.2\cores\esp8266\core_esp8266_wiring_digital.cpp line 167
> 0x40101578: interrupt_handler(void*, void*) at
> ...\esp8266\3.0.2\cores\esp8266\core_esp8266_wiring_digital.cpp line 138
>
> —
> Reply to this email directly, view it on GitHub
> <#8581>, or unsubscribe
> <https://github.com/notifications/unsubscribe-auth/ACBV22NEBMAWUXKX2JAZLM3VLUASXANCNFSM5W2F2HJQ>
> .
> You are receiving this because you are subscribed to this thread.Message
> ID: ***@***.***>
>
|
What's Timer_SSR? What's the exception code? Is this some 3rd party library or are you the author? |
You've not given us an MCVE, either, so there's not much other than guessing we can do now. FWIW, you've placed your IRQ handler in IRAM, which is good. But, have you placed all of whatever class Also, if you have |
Hi Many thanks for your reply and to format my post (I used the correct quote but ....). Timer_SSR class code :
|
Hi again ;) You give me an idea : I make this test :
|
Hi again !!! I have made a simple sketch that produce the crash. Just run the sketch on a Wemos and wait a little for the crash ! lol The Interrupt_Crash.ino sketch and the dump :
|
Why not use the ticker library??
…On Wed, May 25, 2022 at 3:49 AM Lionel ***@***.***> wrote:
Hi
Many thanks for your reply and to format my post (I used the correct quote
but ....).
Yes, it is part of the whole code. But I have tested the rest separately
and "normally", it is OK.
LittleFS is present because I store regularly some data (and also for the
web page).
Timer_SSR is the class that encapsulate the timer1 access. All is in IRAM
. Here is the code below.
Restart reason: 2
Exception cause: 0
Sorry but what is : MCVE ?
I think I respond to all your questions (and sorry for my poor English !!)
Timer_SSR class code :
* TimerInterrupt class
* For ESP8266 boards
* Inspired of ESP8266TimerInterrupt.h written by Khoi Hoang
*/
#pragma once
#include <Arduino.h>
#define MAX_ESP8266_NUM_TIMERS 1
#define MAX_ESP8266_COUNT 8388607
typedef void (*timer_interrupt_cb)();
#define TIM_DIV1_CLOCK (80000000UL) // 80000000 / 1 = 80.0 MHz (80 ticks/us - 104857.588 us max)
#define TIM_DIV16_CLOCK (5000000UL) // 80000000 / 16 = 5.0 MHz (5 ticks/us - 1677721.4 us max)
#define TIM_DIV256_CLOCK (312500UL) // 80000000 / 256 = 312.5 KHz (1 tick = 3.2us - 26843542.4 us max)
#define TIM_CLOCK_FREQ TIM_DIV16_CLOCK
#define TIM_DIV TIM_DIV16
#define MIN_FREQ ((float) TIM_CLOCK_FREQ / MAX_ESP8266_COUNT)
/**
* Class Timer using timer1 with interrupt
* Call startTimer() to run the timer
* ALWAYS stop the timer before any change !
* Set interval in us and set frequency in hertz
*/
class TimerInterrupt
{
private:
timer_interrupt_cb _callback; // pointer to the callback function
float _frequency; // Timer frequency
uint32_t _timerCount; // count to activate timer
uint8_t _loop; // timer loop
public:
TimerInterrupt()
{
if (this->NbTimer == 1)
throw("Only one timer");
_frequency = 0;
_timerCount = 0;
_callback = NULL;
_loop = TIM_LOOP;
this->NbTimer++;
}
~TimerInterrupt()
{
timer1_disable();
timer1_detachInterrupt();
}
// frequency (in hertz)
bool IRAM_ATTR setFrequency(const float frequency_Hz)
{
// ESP8266 only has one usable timer1, max count is only 8,388,607. So to get longer time, we use max available 256 divider
// Will use later if very low frequency is needed.
if (frequency_Hz < MIN_FREQ)
{
return false;
}
_frequency = frequency_Hz;
_timerCount = (uint32_t) (TIM_CLOCK_FREQ / frequency_Hz);
if (_timerCount > MAX_ESP8266_COUNT)
{
_timerCount = MAX_ESP8266_COUNT;
return false;
}
return true;
}
// frequency (in hertz)
bool IRAM_ATTR setFrequency(const float frequency_Hz, const timer_interrupt_cb &callback,
bool loop = true)
{
if (setFrequency(frequency_Hz))
{
_callback = callback;
_loop = (uint8_t) loop;
timer1_disable();
timer1_attachInterrupt(callback);
return true;
}
else
return false;
}
// interval (in microseconds)
bool IRAM_ATTR setInterval(const float interval_us)
{
return setFrequency(1000000.0f / interval_us);
}
// interval (in microseconds)
bool IRAM_ATTR setInterval(const float interval_us, const timer_interrupt_cb &callback,
bool loop = true)
{
return setFrequency(1000000.0f / interval_us, callback, loop);
}
void IRAM_ATTR setCallback(const timer_interrupt_cb &callback)
{
_callback = callback;
timer1_disable();
timer1_attachInterrupt(callback);
}
// set timer loop
void IRAM_ATTR setTimerLoop(bool loop)
{
_loop = (uint8_t) loop;
}
// start the timer
void IRAM_ATTR startTimer(void)
{
timer1_write(_timerCount);
timer1_enable(TIM_DIV, TIM_EDGE, _loop);
}
// stop the timer. Just stop clock source, clear the count
void IRAM_ATTR stopTimer(void)
{
timer1_disable();
}
void IRAM_ATTR detachInterrupt()
{
timer1_detachInterrupt();
}
void IRAM_ATTR reattachInterrupt()
{
if (_callback != NULL)
timer1_attachInterrupt(_callback);
}
static uint8_t NbTimer;
};
uint8_t TimerInterrupt::NbTimer = 0;
// class TimerInterrupt
—
Reply to this email directly, view it on GitHub
<#8581 (comment)>,
or unsubscribe
<https://github.com/notifications/unsubscribe-auth/ACBV22LVE4DBT3CFZZYMI33VLXLPPANCNFSM5W2F2HJQ>
.
You are receiving this because you commented.Message ID:
***@***.***>
|
The goal is not to use another library ! ;) |
Hi, I also test with core 3.0.0 and I have the same crash. I also test with Arduino IDE (I have 1.8.13), same crash. Core dump for 3.0.0 :
|
It is interesting that the crash location for exception 0 is at the start of the |
Hi mhightower83, Thanks for your attention of my problem :) |
I would switch to using integers in the ISR code. |
Hi, Ok, I switch to uint32_t in place of float. |
I have another question : In the interrupt, I use some variables (SSR_PIN, LED_PIN, Top_CS_ZC, ...). |
If a variable is read-only by the ISR, there is no need for special treatment by the compiler. For I don't see a requirement for
Yes. However, IRAM is generally in short supply compared to DRAM and brings additional access restrictions the compiler will not handle. For data access, it will be a little slower than DRAM and access is restricted to aligned 32 bit words. I see it as an option when DRAM is running critically low, and you can sacrifice a little speed and IRAM from the cache for more storage. See https://arduino-esp8266.readthedocs.io/en/latest/mmu.html for more details on using IRAM for data storage. |
Hi
So my project : ESP12E Wemos D1 mini, 4 Mo, core 2.7.4, Sloeber env. on Windows7
Problem : My code work perfectly with core 2.7.4 and crash with 3.0.2. The crash is always around the same place : in the interrupt of the timer1. In short, I made a dimer : when I have the zero cross interrupt, I start the timer1 to activate the SSR relay for a delay.
I really made hundred of try but always the same problem.
Any ideas are welcome :)
Regards,
Lionel
The relevant code is :
The dump crash stack is :
The text was updated successfully, but these errors were encountered: