don't burn so much cpu spinning in loop()

pull/1/head
geeksville 2020-02-07 16:12:55 -08:00
rodzic 6f592fbb6b
commit 039f18c80d
3 zmienionych plików z 19 dodań i 6 usunięć

Wyświetl plik

@ -371,8 +371,10 @@ void setup()
void loop() void loop()
{ {
uint32_t msecstosleep = 1000 * 30; // How long can we sleep before we again need to service the main loop?
gps.loop(); gps.loop();
screen_loop(); msecstosleep = min(screen_loop(), msecstosleep);
service.loop(); service.loop();
loopBLE(); loopBLE();
@ -428,5 +430,6 @@ void loop()
// No GPS lock yet, let the OS put the main CPU in low power mode for 100ms (or until another interrupt comes in) // No GPS lock yet, let the OS put the main CPU in low power mode for 100ms (or until another interrupt comes in)
// i.e. don't just keep spinning in loop as fast as we can. // i.e. don't just keep spinning in loop as fast as we can.
//delay(100); DEBUG_MSG("msecs %d\n", msecstosleep);
delay(msecstosleep);
} }

Wyświetl plik

@ -259,10 +259,10 @@ void screen_setup()
#endif #endif
} }
void screen_loop() uint32_t screen_loop()
{ {
if (!disp) if (!disp)
return; return 30 * 1000;
#ifdef T_BEAM_V10 #ifdef T_BEAM_V10
if (axp192_found && pmu_irq) if (axp192_found && pmu_irq)
@ -295,11 +295,17 @@ void screen_loop()
#endif #endif
static bool showingBootScreen = true; static bool showingBootScreen = true;
ui.update();
uint32_t msecstosleep = ui.update();
// Once we finish showing the bootscreen, remove it from the loop // Once we finish showing the bootscreen, remove it from the loop
if (showingBootScreen && ui.getUiState()->currentFrame == 1) if (showingBootScreen && ui.getUiState()->currentFrame == 1)
{ {
ui.setFrames(nonBootFrames, frameCount - 1); ui.setFrames(nonBootFrames, frameCount - 1);
} }
// If we are scrolling do 30fps, otherwise just 1 fps (to save CPU)
return (ui.getUiState()->frameState == IN_TRANSITION ? 10 : 500);
} }

Wyświetl plik

@ -1,4 +1,8 @@
#pragma once #pragma once
void screen_print(const char * text); void screen_print(const char * text);
void screen_loop(), screen_setup(), screen_on(), screen_off(), screen_show_logo();
/// @return how many msecs can we sleep before we want service again
uint32_t screen_loop();
void screen_setup(), screen_on(), screen_off(), screen_show_logo();