diff --git a/MemoryFree.cpp b/MemoryFree.cpp new file mode 100644 index 0000000000000000000000000000000000000000..3e9eab90ca8e756fa743ea4769c02e682e2fa70a --- /dev/null +++ b/MemoryFree.cpp @@ -0,0 +1,44 @@ + #if (ARDUINO >= 100) +#include <Arduino.h> +#else +#include <WProgram.h> +#endif + +extern unsigned int __heap_start; +extern void *__brkval; + +/* + * The free list structure as maintained by the + * avr-libc memory allocation routines. + */ +struct __freelist { + size_t sz; + struct __freelist *nx; +}; + +/* The head of the free list structure */ +extern struct __freelist *__flp; + +#include "MemoryFree.h" + +/* Calculates the size of the free list */ +int freeListSize() { + struct __freelist* current; + int total = 0; + for (current = __flp; current; current = current->nx) { + total += 2; /* Add two bytes for the memory block's header */ + total += (int) current->sz; + } + return total; +} + +int freeMemory() { + int free_memory; + if ((int)__brkval == 0) { + free_memory = ((int)&free_memory) - ((int)&__heap_start); + } else { + free_memory = ((int)&free_memory) - ((int)__brkval); + free_memory += freeListSize(); + } + return free_memory; +} \ No newline at end of file diff --git a/MemoryFree.h b/MemoryFree.h new file mode 100644 index 0000000000000000000000000000000000000000..3a7f2d5848ff24caf1596350fdf513ca7fb3fb00 --- /dev/null +++ b/MemoryFree.h @@ -0,0 +1,18 @@ + // MemoryFree library based on code posted here: +// http://forum.arduino.cc/index.php?topic=27536.msg204024#msg204024 +// Extended by Matthew Murdoch to include walking of the free list. + +#ifndef MEMORY_FREE_H +#define MEMORY_FREE_H + +#ifdef __cplusplus +extern "C" { +#endif + +int freeMemory(); + +#ifdef __cplusplus +} +#endif + +#endif \ No newline at end of file diff --git a/NodeManager.h b/NodeManager.h index 321702b041f26d0183e1f3bb5caaa54123fcfe01..0377571c5acb4490c8bb2c4c12bfa79bcd6570f9 100644 --- a/NodeManager.h +++ b/NodeManager.h @@ -12,6 +12,8 @@ void printFM(); +void printFM(); + /*********************************** Constants */