diff --git a/DCC.h b/DCC.h index 05e9f9e..61d61f0 100644 --- a/DCC.h +++ b/DCC.h @@ -50,7 +50,7 @@ SKIPTARGET=0xFF // jump to target // Allocations with memory implications..! // Base system takes approx 900 bytes + 8 per loco. Turnouts, Sensors etc are dynamically created #ifdef ARDUINO_AVR_UNO - const byte MAX_LOCOS=20; + const byte MAX_LOCOS=30; #else const byte MAX_LOCOS=50; #endif diff --git a/config.example.h b/config.example.h index 8048a5d..5dbbd2b 100644 --- a/config.example.h +++ b/config.example.h @@ -37,7 +37,7 @@ The configuration file for DCC++ EX Command Station // // DEFINE NUMBER OF MAIN TRACK REGISTER -#define MAX_MAIN_REGISTERS 12 +#define MAX_MAIN_REGISTERS 22 ///////////////////////////////////////////////////////////////////////////////////// // diff --git a/freeMemory.cpp b/freeMemory.cpp new file mode 100644 index 0000000..30fa16d --- /dev/null +++ b/freeMemory.cpp @@ -0,0 +1,42 @@ +/* + * © 2020, Harald Barth + * + * This file is part of Asbelos DCC-EX + * + * This is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * It is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with CommandStation. If not, see . + */ + +#include "freeMemory.h" + +// thanks go to https://github.com/mpflaga/Arduino-MemoryFree +#if defined(__arm__) +extern "C" char* sbrk(int); +#elif defined(__AVR__) +extern char *__brkval; +extern char *__malloc_heap_start; +#else +#error Unsupported board type +#endif + + +int freeMemory() { + char top; +#if defined(__arm__) + return &top - reinterpret_cast(sbrk(0)); +#elif defined(__AVR__) + return __brkval ? &top - __brkval : &top - __malloc_heap_start; +#else +#error bailed out alredy above +#endif +} diff --git a/freeMemory.h b/freeMemory.h index e3af2fe..2bd35c1 100644 --- a/freeMemory.h +++ b/freeMemory.h @@ -1,20 +1,23 @@ +/* + * © 2020, Harald Barth + * + * This file is part of DCC-EX + * + * This is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * It is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with CommandStation. If not, see . + */ + #ifndef freeMemory_h #define freeMemory_h - -// thanks go to https://github.com/mpflaga/Arduino-MemoryFree -#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(sbrk(0)); -#else // __arm__ - return __brkval ? &top - __brkval : &top - __malloc_heap_start; -#endif // __arm__ -} +int freeMemory(); #endif