@@ -449,9 +449,9 @@ void FFTcode(void * parameter)
449449 }
450450
451451#if defined(WLED_DEBUG) || defined(SR_DEBUG)|| defined(SR_STATS)
452+ // timing
452453 uint64_t start = esp_timer_get_time ();
453454 bool haveDoneFFT = false ; // indicates if second measurement (FFT time) is valid
454-
455455 static uint64_t lastCycleStart = 0 ;
456456 static uint64_t lastLastTime = 0 ;
457457 if ((lastCycleStart > 0 ) && (lastCycleStart < start)) { // filter out overflows
@@ -466,6 +466,14 @@ void FFTcode(void * parameter)
466466 if (audioSource) audioSource->getSamples (vReal, samplesFFT);
467467
468468#if defined(WLED_DEBUG) || defined(SR_DEBUG)|| defined(SR_STATS)
469+ // debug info in case that stack usage changes
470+ static unsigned int minStackFree = UINT32_MAX;
471+ unsigned int stackFree = uxTaskGetStackHighWaterMark (NULL );
472+ if (minStackFree > stackFree) {
473+ minStackFree = stackFree;
474+ DEBUGSR_PRINTF (" || %-9s min free stack %d\n " , pcTaskGetTaskName (NULL ), minStackFree); // WLEDMM
475+ }
476+ // timing
469477 if (start < esp_timer_get_time ()) { // filter out overflows
470478 uint64_t sampleTimeInMillis = (esp_timer_get_time () - start +5ULL ) / 10ULL ; // "+5" to ensure proper rounding
471479 sampleTime = (sampleTimeInMillis*3 + sampleTime*7 )/10.0 ; // smooth
@@ -715,6 +723,7 @@ void FFTcode(void * parameter)
715723 postProcessFFTResults ((fabsf (volumeSmth)>0 .25f )? true : false , NUM_GEQ_CHANNELS); // this function modifies fftCalc, fftAvg and fftResult
716724
717725#if defined(WLED_DEBUG) || defined(SR_DEBUG)|| defined(SR_STATS)
726+ // timing
718727 static uint64_t lastLastFFT = 0 ;
719728 if (haveDoneFFT && (start < esp_timer_get_time ())) { // filter out overflows
720729 uint64_t fftTimeInMillis = ((esp_timer_get_time () - start) +5ULL ) / 10ULL ; // "+5" to ensure proper rounding
@@ -1758,6 +1767,10 @@ class AudioReactive : public Usermod {
17581767 DEBUGSR_PRINT (F (" AR: init done, enabled = " ));
17591768 DEBUGSR_PRINTLN (enabled ? F (" true." ) : F (" false." ));
17601769 USER_FLUSH ();
1770+
1771+ #if defined(ARDUINO_ARCH_ESP32) && defined(SR_DEBUG)
1772+ DEBUGSR_PRINTF (" || %-9s min free stack %d\n " , pcTaskGetTaskName (NULL ), uxTaskGetStackHighWaterMark (NULL )); // WLEDMM
1773+ #endif
17611774 }
17621775
17631776
@@ -1788,6 +1801,10 @@ class AudioReactive : public Usermod {
17881801 DEBUGSR_PRINTLN (udpSyncConnected ? F (" AR connected(): UDP: connected to WIFI." ) : F (" AR connected(): UDP is disconnected (Wifi)." ));
17891802 }
17901803 }
1804+
1805+ #if defined(ARDUINO_ARCH_ESP32) && defined(SR_DEBUG)
1806+ DEBUGSR_PRINTF (" || %-9s min free stack %d\n " , pcTaskGetTaskName (NULL ), uxTaskGetStackHighWaterMark (NULL )); // WLEDMM
1807+ #endif
17911808 }
17921809
17931810
@@ -1844,6 +1861,15 @@ class AudioReactive : public Usermod {
18441861#ifdef ARDUINO_ARCH_ESP32
18451862 if (!audioSource->isInitialized ()) disableSoundProcessing = true ; // no audio source
18461863
1864+ #ifdef SR_DEBUG
1865+ // debug info in case that task stack usage changes
1866+ static unsigned int minLoopStackFree = UINT32_MAX;
1867+ unsigned int stackFree = uxTaskGetStackHighWaterMark (NULL );
1868+ if (minLoopStackFree > stackFree) {
1869+ minLoopStackFree = stackFree;
1870+ DEBUGSR_PRINTF (" || %-9s min free stack %d\n " , pcTaskGetTaskName (NULL ), minLoopStackFree); // WLEDMM
1871+ }
1872+ #endif
18471873
18481874 // Only run the sampling code IF we're not in Receive mode or realtime mode
18491875 if (!(audioSyncEnabled & 0x02 ) && !disableSoundProcessing) {
@@ -2040,6 +2066,10 @@ class AudioReactive : public Usermod {
20402066 micDataReal = 0 .0f ; // just to be sure
20412067 if (enabled) disableSoundProcessing = false ;
20422068 updateIsRunning = init;
2069+
2070+ #if defined(ARDUINO_ARCH_ESP32) && defined(SR_DEBUG)
2071+ DEBUGSR_PRINTF (" || %-9s min free stack %d\n " , pcTaskGetTaskName (NULL ), uxTaskGetStackHighWaterMark (NULL )); // WLEDMM
2072+ #endif
20432073 }
20442074
20452075#else // reduced function for 8266
0 commit comments