Fix negative heap fragmentation

This commit is contained in:
Theo Arends 2021-10-08 11:52:50 +02:00
parent 3bb9d4854f
commit eaeacbfa93
4 changed files with 19 additions and 17 deletions

View File

@ -2422,10 +2422,8 @@ void AddLogData(uint32_t loglevel, const char* log_data, const char* log_data_pa
snprintf_P(mxtime, sizeof(mxtime), PSTR("%s-%03d"), snprintf_P(mxtime, sizeof(mxtime), PSTR("%s-%03d"),
mxtime, ESP_getFreeHeap1024()); mxtime, ESP_getFreeHeap1024());
#else #else
uint32_t freemem = ESP_getFreeHeap();
int32_t free_maxmem = 100 - (int32_t)(ESP_getMaxAllocHeap() * 100 / freemem);
snprintf_P(mxtime, sizeof(mxtime), PSTR("%s-%03d/%02d"), snprintf_P(mxtime, sizeof(mxtime), PSTR("%s-%03d/%02d"),
mxtime, freemem / 1024, free_maxmem); mxtime, ESP_getFreeHeap1024(), ESP_getHeapFragmentation());
#endif #endif
} }
strcat(mxtime, " "); strcat(mxtime, " ");

View File

@ -398,6 +398,12 @@ uint32_t ESP_getMaxAllocHeap(void) {
return free_block_size; return free_block_size;
} }
int32_t ESP_getHeapFragmentation(void) {
int32_t free_maxmem = 100 - (int32_t)(ESP_getMaxAllocHeap() * 100 / ESP_getFreeHeap());
if (free_maxmem < 0) { free_maxmem = 0; }
return free_maxmem;
}
void ESP_Restart(void) { void ESP_Restart(void) {
ESP.restart(); ESP.restart();
} }

View File

@ -2439,8 +2439,7 @@ void HandleInformation(void)
WSContentSend_P(PSTR("}1" D_PROGRAM_SIZE "}2%d kB"), ESP_getSketchSize() / 1024); WSContentSend_P(PSTR("}1" D_PROGRAM_SIZE "}2%d kB"), ESP_getSketchSize() / 1024);
WSContentSend_P(PSTR("}1" D_FREE_PROGRAM_SPACE "}2%d kB"), ESP.getFreeSketchSpace() / 1024); WSContentSend_P(PSTR("}1" D_FREE_PROGRAM_SPACE "}2%d kB"), ESP.getFreeSketchSpace() / 1024);
#ifdef ESP32 #ifdef ESP32
int32_t freeMaxMem = 100 - (int32_t)(ESP_getMaxAllocHeap() * 100 / ESP_getFreeHeap()); WSContentSend_PD(PSTR("}1" D_FREE_MEMORY "}2%1_f kB (" D_FRAGMENTATION " %d%%)"), &freemem, ESP_getHeapFragmentation());
WSContentSend_PD(PSTR("}1" D_FREE_MEMORY "}2%1_f kB (" D_FRAGMENTATION " %d%%)"), &freemem, freeMaxMem);
if (UsePSRAM()) { if (UsePSRAM()) {
WSContentSend_P(PSTR("}1" D_PSR_MAX_MEMORY "}2%d kB"), ESP.getPsramSize() / 1024); WSContentSend_P(PSTR("}1" D_PSR_MAX_MEMORY "}2%d kB"), ESP.getPsramSize() / 1024);
WSContentSend_P(PSTR("}1" D_PSR_FREE_MEMORY "}2%d kB"), ESP.getFreePsram() / 1024); WSContentSend_P(PSTR("}1" D_PSR_FREE_MEMORY "}2%d kB"), ESP.getFreePsram() / 1024);

View File

@ -201,8 +201,7 @@ extern "C" {
map_insert_int(vm, "program", ESP_getSketchSize() / 1024); map_insert_int(vm, "program", ESP_getSketchSize() / 1024);
map_insert_int(vm, "program_free", ESP.getFreeSketchSpace() / 1024); map_insert_int(vm, "program_free", ESP.getFreeSketchSpace() / 1024);
map_insert_int(vm, "heap_free", ESP_getFreeHeap() / 1024); map_insert_int(vm, "heap_free", ESP_getFreeHeap() / 1024);
int32_t freeMaxMem = 100 - (int32_t)(ESP_getMaxAllocHeap() * 100 / ESP_getFreeHeap()); map_insert_int(vm, "frag", ESP_getHeapFragmentation());
map_insert_int(vm, "frag", freeMaxMem);
if (UsePSRAM()) { if (UsePSRAM()) {
map_insert_int(vm, "psram", ESP.getPsramSize() / 1024); map_insert_int(vm, "psram", ESP.getPsramSize() / 1024);
map_insert_int(vm, "psram_free", ESP.getFreePsram() / 1024); map_insert_int(vm, "psram_free", ESP.getFreePsram() / 1024);