Function to calculate the memory available for malloc

Dependents:   AvailableMemory_HelloWorld MCBBThermostat helloaabbc SP14P1_skeleton

Revision:
0:a98bf0c96bf1
Child:
11:0f5d5918761a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/AvailableMemory.cpp	Sun Nov 07 19:11:52 2010 +0000
@@ -0,0 +1,39 @@
+#include "AvailableMemory.h"
+#include <stdlib.h>
+
+namespace segundo {
+namespace Utilities {
+
+int AvailableMemory() {
+
+    return AvailableMemory(256, 0x8000, true);
+}
+
+int AvailableMemory(int resolution, int maximum, bool disableInterrupts) {
+
+    if (resolution < 1) resolution = 1;
+    if (maximum < 0) maximum = 0;
+
+    int low = 0;
+    int high = maximum + 1;
+
+    if (disableInterrupts) __disable_irq();
+
+    while (high - low > resolution) {
+        int mid = (low + high) / 2;
+        void* p = malloc(mid);
+        if (p == NULL) {
+            high = mid;
+        } else {
+            free(p);
+            low = mid;
+        }
+    }
+
+    if (disableInterrupts) __enable_irq();
+
+    return low;
+}
+
+} // namespace Utilities
+} // namespace segundo
\ No newline at end of file