finds size of largest block of heap memory

Dependents:   myBlueUSB mbed_TANK_Kinect myBlueUSB_ros myBlueUSB_localfix

Committer:
networker
Date:
Wed May 04 09:14:02 2011 +0000
Revision:
0:2b2aa11cebd7

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
networker 0:2b2aa11cebd7 1 #include "AvailableMemory.h"
networker 0:2b2aa11cebd7 2 #include <stdlib.h>
networker 0:2b2aa11cebd7 3
networker 0:2b2aa11cebd7 4 namespace segundo {
networker 0:2b2aa11cebd7 5 namespace Utilities {
networker 0:2b2aa11cebd7 6
networker 0:2b2aa11cebd7 7 int AvailableMemory(int resolution, int maximum, bool disableInterrupts) {
networker 0:2b2aa11cebd7 8
networker 0:2b2aa11cebd7 9 if (resolution < 1) resolution = 1;
networker 0:2b2aa11cebd7 10 if (maximum < 0) maximum = 0;
networker 0:2b2aa11cebd7 11
networker 0:2b2aa11cebd7 12 int low = 0;
networker 0:2b2aa11cebd7 13 int high = maximum + 1;
networker 0:2b2aa11cebd7 14
networker 0:2b2aa11cebd7 15 if (disableInterrupts) __disable_irq();
networker 0:2b2aa11cebd7 16
networker 0:2b2aa11cebd7 17 while (high - low > resolution) {
networker 0:2b2aa11cebd7 18 int mid = (low + high) / 2;
networker 0:2b2aa11cebd7 19 void* p = malloc(mid);
networker 0:2b2aa11cebd7 20 if (p == NULL) {
networker 0:2b2aa11cebd7 21 high = mid;
networker 0:2b2aa11cebd7 22 } else {
networker 0:2b2aa11cebd7 23 free(p);
networker 0:2b2aa11cebd7 24 low = mid;
networker 0:2b2aa11cebd7 25 }
networker 0:2b2aa11cebd7 26 }
networker 0:2b2aa11cebd7 27
networker 0:2b2aa11cebd7 28 if (disableInterrupts) __enable_irq();
networker 0:2b2aa11cebd7 29
networker 0:2b2aa11cebd7 30 return low;
networker 0:2b2aa11cebd7 31 }
networker 0:2b2aa11cebd7 32
networker 0:2b2aa11cebd7 33 } // namespace Utilities
networker 0:2b2aa11cebd7 34 } // namespace segundo