Revised test using private new/delete methods suggested in http://mbed.org/forum/mbed/post/24686/

Dependencies:   mbed

Committer:
WiredHome
Date:
Wed Jun 11 10:59:02 2014 +0000
Revision:
0:63f4520f2953
Added custom new/delete methods suggested in http://mbed.org/forum/mbed/post/24686/

Who changed what in which revision?

UserRevisionLine numberNew contents of line
WiredHome 0:63f4520f2953 1 #include "mbed.h" // blinky starts with mbed lib 76, however this was updated to lib 81
WiredHome 0:63f4520f2953 2 #include "Utility.h"
WiredHome 0:63f4520f2953 3 //#include "RawSerial.h"
WiredHome 0:63f4520f2953 4
WiredHome 0:63f4520f2953 5 Serial pc(USBTX, USBRX);
WiredHome 0:63f4520f2953 6 DigitalOut myled(LED1);
WiredHome 0:63f4520f2953 7 extern "C" void mbed_reset();
WiredHome 0:63f4520f2953 8
WiredHome 0:63f4520f2953 9 void* operator new(size_t size) throw()
WiredHome 0:63f4520f2953 10 {
WiredHome 0:63f4520f2953 11 void *ptr;
WiredHome 0:63f4520f2953 12
WiredHome 0:63f4520f2953 13 ptr = malloc(size);
WiredHome 0:63f4520f2953 14 return ptr;
WiredHome 0:63f4520f2953 15 }
WiredHome 0:63f4520f2953 16
WiredHome 0:63f4520f2953 17 void operator delete(void *ptr) throw()
WiredHome 0:63f4520f2953 18 {
WiredHome 0:63f4520f2953 19 free(ptr);
WiredHome 0:63f4520f2953 20 }
WiredHome 0:63f4520f2953 21
WiredHome 0:63f4520f2953 22 void operator delete[](void *ptr) throw()
WiredHome 0:63f4520f2953 23 {
WiredHome 0:63f4520f2953 24 free(ptr);
WiredHome 0:63f4520f2953 25 }
WiredHome 0:63f4520f2953 26
WiredHome 0:63f4520f2953 27 int main() {
WiredHome 0:63f4520f2953 28 //pc.baud(460800); // I like a snappy terminal, so crank it up!
WiredHome 0:63f4520f2953 29 int f = Free();
WiredHome 0:63f4520f2953 30 pc.printf("\r\nBlinky eating memory - Build " __DATE__ " " __TIME__ "\r\n");
WiredHome 0:63f4520f2953 31 pc.printf(" %d bytes free\r\n", f);
WiredHome 0:63f4520f2953 32 int i = 2000;
WiredHome 0:63f4520f2953 33 int total = 0;
WiredHome 0:63f4520f2953 34
WiredHome 0:63f4520f2953 35 while(1) {
WiredHome 0:63f4520f2953 36 myled = 1;
WiredHome 0:63f4520f2953 37 wait(0.2);
WiredHome 0:63f4520f2953 38 pc.printf("Allocating %d bytes in addition to %d already allocated.\r\n", i, total);
WiredHome 0:63f4520f2953 39 char * p = new char [i]; // This never returns after 24000
WiredHome 0:63f4520f2953 40 //char * p = (char *)malloc(i); // This fails gracefully with NULL return after 24000
WiredHome 0:63f4520f2953 41 pc.printf(" %d bytes free.\r\n", Free());
WiredHome 0:63f4520f2953 42 __heapvalid((__heapprt)fprintf, stdout, 0);
WiredHome 0:63f4520f2953 43 if (p) {
WiredHome 0:63f4520f2953 44 total += i;
WiredHome 0:63f4520f2953 45 pc.printf(" Success! \r\n");
WiredHome 0:63f4520f2953 46 } else {
WiredHome 0:63f4520f2953 47 pc.printf(" Failed...\r\n");
WiredHome 0:63f4520f2953 48 break;
WiredHome 0:63f4520f2953 49 }
WiredHome 0:63f4520f2953 50 myled = 0;
WiredHome 0:63f4520f2953 51 wait(0.2);
WiredHome 0:63f4520f2953 52 }
WiredHome 0:63f4520f2953 53 pc.printf("done.\r\n");
WiredHome 0:63f4520f2953 54 while (!pc.readable()) {}
WiredHome 0:63f4520f2953 55 mbed_reset();
WiredHome 0:63f4520f2953 56 }