#include <LinkedList.h>
#include "mString.h"
#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();
struct btn_t {
int x = -1;
int y = -1;
int w = -1;
int h = -1;
bool visible = false;
//mString<16> text; //text or .jpg
//mString<20> cmd;
String text; //text or .jpg
String cmd;
bool img = false;
bool isTouch = false;
};
LinkedList<btn_t> list_btn;
//SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS
void setup() {
Serial.begin(115200);
Serial.print(F("mem free:"));
Serial.println(freeMemory());
for (int n = 0; n < 10; n++)
{
//btn_t BTN;
//BTN.x = 100;
//BTN.text = "N:" + String(n);
// list_btn.add(BTN);
list_btn.add(btn_t());
list_btn[n].x = 100;
list_btn[n].text = "NNNN:" + String(n);
}
Serial.print(F("mem ADD:"));
Serial.println(freeMemory());
while (list_btn.size() != 0)
{
btn_t BTN = list_btn.pop();
Serial.println(BTN.text);
}
// list_btn.clear();
Serial.print(F("mem END:"));
Serial.println(freeMemory());
// Serial.print(F("size:"));
// Serial.println(list_btn.size());
}
void loop() {
}
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__
}