mirror of
https://github.com/HASwitchPlate/openHASP.git
synced 2025-07-25 20:26:41 +00:00
stm32 memory manager
This commit is contained in:
parent
80b1c0e6fa
commit
81ad865456
140
src/hasp_hal.cpp
140
src/hasp_hal.cpp
@ -107,56 +107,7 @@ String halGetResetInfo()
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef __arm__
|
|
||||||
// should use uinstd.h to define sbrk but Due causes a conflict
|
|
||||||
extern "C" char* sbrk(int incr);
|
|
||||||
#else // __ARM__
|
|
||||||
extern char *__brkval;
|
|
||||||
#endif // __arm__
|
|
||||||
|
|
||||||
int freeMemory() {
|
|
||||||
char top;
|
|
||||||
#ifdef __arm__
|
|
||||||
return &top - reinterpret_cast<char*>(sbrk(0));
|
|
||||||
#elif defined(CORE_TEENSY) || (ARDUINO > 103 && ARDUINO != 151)
|
|
||||||
return &top - __brkval;
|
|
||||||
#else // __arm__
|
|
||||||
return __brkval ? &top - __brkval : &top - __malloc_heap_start;
|
|
||||||
#endif // __arm__
|
|
||||||
}
|
|
||||||
|
|
||||||
uint8_t halGetHeapFragmentation()
|
|
||||||
{
|
|
||||||
#if defined(ARDUINO_ARCH_ESP32)
|
|
||||||
return (int8_t)(100.00f - (float)ESP.getMaxAllocHeap() * 100.00f / (float)ESP.getFreeHeap());
|
|
||||||
#elif defined(ARDUINO_ARCH_ESP8266)
|
|
||||||
return ESP.getHeapFragmentation();
|
|
||||||
#else
|
|
||||||
return 255;
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
size_t halGetMaxFreeBlock()
|
|
||||||
{
|
|
||||||
#if defined(ARDUINO_ARCH_ESP32)
|
|
||||||
return ESP.getMaxAllocHeap();
|
|
||||||
#elif defined(ARDUINO_ARCH_ESP8266)
|
|
||||||
return ESP.getMaxFreeBlockSize();
|
|
||||||
#else
|
|
||||||
return freeMemory();
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
size_t halGetFreeHeap(void)
|
|
||||||
{
|
|
||||||
#if defined(ARDUINO_ARCH_ESP32)
|
|
||||||
return ESP.getFreeHeap();
|
|
||||||
#elif defined(ARDUINO_ARCH_ESP8266)
|
|
||||||
return ESP.getFreeHeap();
|
|
||||||
#else
|
|
||||||
return 1;
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
String halGetCoreVersion()
|
String halGetCoreVersion()
|
||||||
{
|
{
|
||||||
@ -193,8 +144,8 @@ String halGetChipModel()
|
|||||||
case CHIP_ESP32S2:
|
case CHIP_ESP32S2:
|
||||||
model += F("ESP32-S2");
|
model += F("ESP32-S2");
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
default:
|
default:
|
||||||
model = F("Unknown ESP");
|
model = F("Unknown ESP");
|
||||||
}
|
}
|
||||||
model += F(" rev");
|
model += F(" rev");
|
||||||
@ -202,4 +153,89 @@ String halGetChipModel()
|
|||||||
#endif // ESP32
|
#endif // ESP32
|
||||||
|
|
||||||
return model;
|
return model;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*******************************/
|
||||||
|
/* Memory Management Functions */
|
||||||
|
|
||||||
|
#if defined(STM32F4xx)
|
||||||
|
#include <malloc.h> // for mallinfo()
|
||||||
|
#include <unistd.h> // for sbrk()
|
||||||
|
|
||||||
|
int freeHighMemory()
|
||||||
|
{
|
||||||
|
char top;
|
||||||
|
#ifdef __arm__
|
||||||
|
return &top - reinterpret_cast<char *>(sbrk(0));
|
||||||
|
#elif defined(CORE_TEENSY) || (ARDUINO > 103 && ARDUINO != 151)
|
||||||
|
return &top - __brkval;
|
||||||
|
#else // __arm__
|
||||||
|
return __brkval ? &top - __brkval : &top - __malloc_heap_start;
|
||||||
|
#endif // __arm__
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
extern char *fake_heap_end; // current heap start
|
||||||
|
extern char *fake_heap_start; // current heap end
|
||||||
|
|
||||||
|
char* getHeapStart() {
|
||||||
|
return fake_heap_start;
|
||||||
|
}
|
||||||
|
|
||||||
|
char* getHeapEnd() {
|
||||||
|
return (char*)sbrk(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
char* getHeapLimit() {
|
||||||
|
return fake_heap_end;
|
||||||
|
}
|
||||||
|
|
||||||
|
int getMemUsed() { // returns the amount of used memory in bytes
|
||||||
|
struct mallinfo mi = mallinfo();
|
||||||
|
return mi.uordblks;
|
||||||
|
}
|
||||||
|
|
||||||
|
int getMemFree() { // returns the amount of free memory in bytes
|
||||||
|
struct mallinfo mi = mallinfo();
|
||||||
|
return mi.fordblks + freeHighMemory();
|
||||||
|
} */
|
||||||
|
|
||||||
|
size_t halGetMaxFreeBlock()
|
||||||
|
{
|
||||||
|
#if defined(ARDUINO_ARCH_ESP32)
|
||||||
|
return ESP.getMaxAllocHeap();
|
||||||
|
#elif defined(ARDUINO_ARCH_ESP8266)
|
||||||
|
return ESP.getMaxFreeBlockSize();
|
||||||
|
#else
|
||||||
|
return freeHighMemory();
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
size_t halGetFreeHeap(void)
|
||||||
|
{
|
||||||
|
#if defined(ARDUINO_ARCH_ESP32)
|
||||||
|
return ESP.getFreeHeap();
|
||||||
|
#elif defined(ARDUINO_ARCH_ESP8266)
|
||||||
|
return ESP.getFreeHeap();
|
||||||
|
#else
|
||||||
|
struct mallinfo chuncks = mallinfo();
|
||||||
|
|
||||||
|
// fordblks
|
||||||
|
// This is the total size of memory occupied by free (not in use) chunks.
|
||||||
|
|
||||||
|
return chuncks.fordblks + freeHighMemory();
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
uint8_t halGetHeapFragmentation()
|
||||||
|
{
|
||||||
|
#if defined(ARDUINO_ARCH_ESP32)
|
||||||
|
return (int8_t)(100.00f - (float)ESP.getMaxAllocHeap() * 100.00f / (float)ESP.getFreeHeap());
|
||||||
|
#elif defined(ARDUINO_ARCH_ESP8266)
|
||||||
|
return ESP.getHeapFragmentation();
|
||||||
|
#else
|
||||||
|
return (int8_t)(100.00f - (float)freeHighMemory() * 100.00f / (float)halGetFreeHeap());
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user