101 lines
3.7 KiB
C++
101 lines
3.7 KiB
C++
/*
|
|
* WLED Arduino IDE compatibility file.
|
|
*
|
|
* Where has everything gone?
|
|
*
|
|
* In April 2020, the project's structure underwent a major change.
|
|
* Global variables are now found in file "wled.h"
|
|
* Global function declarations are found in "fcn_declare.h"
|
|
*
|
|
* Usermod compatibility: Existing wled06_usermod.ino mods should continue to work. Delete usermod.cpp.
|
|
* New usermods should use usermod.cpp instead.
|
|
*/
|
|
|
|
#ifdef WLED_DEBUG_HEAP
|
|
void heap_caps_alloc_failed_hook(size_t requested_size, uint32_t caps, const char *function_name)
|
|
{
|
|
Serial.printf("*** %s failed to allocate %d bytes with ",function_name, requested_size);
|
|
if (caps & (1 << 0)) Serial.print("Executable ");
|
|
if (caps & (1 << 1)) Serial.print("32-Bit_Aligned ");
|
|
if (caps & (1 << 2)) Serial.print("8-Bit_Aligned ");
|
|
if (caps & (1 << 3)) Serial.print("DMA ");
|
|
if (caps & (1 << 10)) Serial.print("SPI_RAM ");
|
|
if (caps & (1 << 11)) Serial.print("Internal ");
|
|
if (caps & (1 << 12)) Serial.print("Default ");
|
|
if (caps & (1 << 13)) Serial.print("IRAM+unaligned ");
|
|
if (caps & (1 << 14)) Serial.print("Retention_DMA ");
|
|
if (caps & (1 << 15)) Serial.print("RTC_fast ");
|
|
Serial.print("capabilities - largest free block: "+String(heap_caps_get_largest_free_block(caps)));
|
|
|
|
size_t largest_free = heap_caps_get_largest_free_block(caps);
|
|
size_t total_free = heap_caps_get_free_size(caps);
|
|
float fragmentation = 100.0f;
|
|
if ((largest_free > 1) && (total_free > largest_free))
|
|
fragmentation = 100.f * (1.0f - (float(largest_free) / float(total_free)) );
|
|
Serial.print("; \t available: " + String(total_free));
|
|
Serial.print(" (frag "); Serial.print(fragmentation, 2); Serial.println("%).");
|
|
|
|
if (!heap_caps_check_integrity_all(false)) {
|
|
Serial.println("*** Heap CORRUPTED: "+String(heap_caps_check_integrity_all(true)));
|
|
}
|
|
}
|
|
|
|
#if 0 // softhack007 did not get this hook to work
|
|
void esp_heap_trace_free_hook(void* ptr)
|
|
{
|
|
if (ptr == nullptr) {
|
|
Serial.println("** free: attempt to free nullptr.");
|
|
} else {
|
|
size_t blocksize = heap_caps_get_allocated_size(ptr);
|
|
if ((blocksize < 1) || (blocksize > 256000))
|
|
Serial.println("**** free: bad pointer to " + String(blocksize) + "bytes.");
|
|
else
|
|
Serial.println("** free " + String(blocksize) + "bytes.");
|
|
}
|
|
}
|
|
#endif
|
|
#endif
|
|
|
|
#include "wled.h"
|
|
|
|
unsigned long lastMillis = 0; //WLEDMM
|
|
unsigned long loopCounter = 0; //WLEDMM
|
|
|
|
unsigned long lps = 0; // loops per second
|
|
//unsigned long lps2 = 0; // lps without "show"
|
|
//unsigned long long showtime = 0; // time spent in "show" (micros)
|
|
|
|
void setup() __attribute__((used)); // needed for -flto
|
|
void setup() {
|
|
#ifdef WLED_DEBUG_HEAP
|
|
esp_err_t error = heap_caps_register_failed_alloc_callback(heap_caps_alloc_failed_hook);
|
|
#endif
|
|
WLED::instance().setup();
|
|
}
|
|
|
|
void loop() __attribute__((used)); // needed for -flto
|
|
void loop() {
|
|
//WLEDMM show loops per second
|
|
#if defined(WLED_DEBUG) || defined(WLED_DEBUG_HEAP)
|
|
loopCounter++;
|
|
//if (millis() - lastMillis >= 10000) {
|
|
if (millis() - lastMillis >= 8000) {
|
|
long delta = millis() - lastMillis;
|
|
if ((delta > 0) && (loopCounter > 0)) {
|
|
lps = (loopCounter*1000U) / delta;
|
|
//if (delta > (showtime / 1000)) lps2 = (loopCounter*1000U) / (delta - (showtime / 1000));
|
|
USER_PRINTF("%3lu lps %5.1fms \t", lps, float(delta) / float(loopCounter));
|
|
USER_PRINTF("%3u fps\t\t", strip.getFps());
|
|
//USER_PRINTF("%lu lps without show\t\t", lps2);
|
|
//USER_PRINTF("target frametime %dms\t", int(strip.getFrameTime()));
|
|
//USER_PRINTF("target FPS %d", int(strip.getTargetFps()));
|
|
USER_PRINTLN("");
|
|
}
|
|
lastMillis = millis();
|
|
loopCounter = 0;
|
|
//showtime = 0;
|
|
}
|
|
#endif
|
|
WLED::instance().loop();
|
|
}
|