From 4058cd144b3ee112fc41dc5b39fe274fa23c2e28 Mon Sep 17 00:00:00 2001 From: NotaRobotexe Date: Tue, 25 Jun 2019 14:30:11 +0200 Subject: [PATCH] add delay_keep_alive without updating lcd --- Firmware/Marlin.h | 2 ++ Firmware/Marlin_main.cpp | 18 ++++++++++++++++++ Firmware/sound.cpp | 30 +++++++++++++++--------------- 3 files changed, 35 insertions(+), 15 deletions(-) diff --git a/Firmware/Marlin.h b/Firmware/Marlin.h index 509880922..3d4fc2238 100755 --- a/Firmware/Marlin.h +++ b/Firmware/Marlin.h @@ -407,6 +407,8 @@ extern void calculate_extruder_multipliers(); // Similar to the default Arduino delay function, // but it keeps the background tasks running. extern void delay_keep_alive(unsigned int ms); +// same but this need to be used when calling delay from lcd_update() else stack owerflow can occur +extern void delay_keep_alive_no_lcd_update(unsigned int ms); extern void check_babystep(); diff --git a/Firmware/Marlin_main.cpp b/Firmware/Marlin_main.cpp index 88fc1b459..ec59c3460 100755 --- a/Firmware/Marlin_main.cpp +++ b/Firmware/Marlin_main.cpp @@ -8078,6 +8078,24 @@ void delay_keep_alive(unsigned int ms) } } +void delay_keep_alive_no_lcd_update(unsigned int ms) +{ + for (;;) { + manage_heater(); + // Manage inactivity, but don't disable steppers on timeout. + manage_inactivity(true); + if (ms == 0) + break; + else if (ms >= 50) { + _delay(50); + ms -= 50; + } else { + _delay(ms); + ms = 0; + } + } +} + static void wait_for_heater(long codenum, uint8_t extruder) { #ifdef TEMP_RESIDENCY_TIME diff --git a/Firmware/sound.cpp b/Firmware/sound.cpp index b84c6e60b..6545caaef 100644 --- a/Firmware/sound.cpp +++ b/Firmware/sound.cpp @@ -66,12 +66,12 @@ void Sound_MakeCustom(uint16_t ms,uint16_t tone_,bool critical){ if (eSoundMode != e_SOUND_MODE_SILENT){ if(!tone_){ WRITE(BEEPER, HIGH); - delayMicroseconds(ms); + delay_keep_alive_no_lcd_update(ms); WRITE(BEEPER, LOW); } else{ _tone(BEEPER, tone_); - delay_keep_alive(ms); + delay_keep_alive_no_lcd_update(ms); _noTone(BEEPER); } } @@ -79,13 +79,13 @@ void Sound_MakeCustom(uint16_t ms,uint16_t tone_,bool critical){ else{ if(!tone_){ WRITE(BEEPER, HIGH); - delayMicroseconds(ms); + delay_keep_alive_no_lcd_update(ms); WRITE(BEEPER, LOW); - delayMicroseconds(100); + delay_keep_alive_no_lcd_update(100); } else{ _tone(BEEPER, tone_); - delay_keep_alive(ms); + delay_keep_alive_no_lcd_update(ms); _noTone(BEEPER); } } @@ -97,7 +97,7 @@ switch(eSoundMode) { case e_SOUND_MODE_LOUD: if(eSoundType==e_SOUND_TYPE_ButtonEcho) - Sound_DoSound_Echo(); + delay_keep_alive_no_lcd_update(); if(eSoundType==e_SOUND_TYPE_StandardPrompt) Sound_DoSound_Prompt(); if(eSoundType==e_SOUND_TYPE_StandardAlert) @@ -135,9 +135,9 @@ switch(eSoundMode) static void Sound_DoSound_Blind_Alert(void) { _tone(BEEPER,100); - delay_keep_alive(50); + delay_keep_alive_no_lcd_update(50); _noTone(BEEPER); - delay_keep_alive(200); + delay_keep_alive_no_lcd_update(200); } static void Sound_DoSound_Encoder_Move(void) @@ -147,9 +147,9 @@ uint8_t nI; for(nI=0;nI<5;nI++) { WRITE(BEEPER,HIGH); - delayMicroseconds(75); + delay_keep_alive_no_lcd_update(75); WRITE(BEEPER,LOW); - delayMicroseconds(75); + delay_keep_alive_no_lcd_update(75); } } @@ -160,16 +160,16 @@ uint8_t nI; for(nI=0;nI<10;nI++) { WRITE(BEEPER,HIGH); - delayMicroseconds(100); + delay_keep_alive_no_lcd_update(100); WRITE(BEEPER,LOW); - delayMicroseconds(100); + delay_keep_alive_no_lcd_update(100); } } static void Sound_DoSound_Prompt(void) { WRITE(BEEPER,HIGH); -delay_keep_alive(500); +delay_keep_alive_no_lcd_update(500); WRITE(BEEPER,LOW); } @@ -181,8 +181,8 @@ nMax=bOnce?1:3; for(nI=0;nI