Skip to content

core 2.7.4 to 3.0.2 problem in interrupt and timer1 #8581

Closed
@GitHubLionel

Description

@GitHubLionel

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions