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

Dependencies:   mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 #include "mbed.h"   // blinky starts with mbed lib 76, however this was updated to lib 81
00002 #include "Utility.h"
00003 //#include "RawSerial.h"
00004 
00005 Serial pc(USBTX, USBRX);
00006 DigitalOut myled(LED1);
00007 extern "C" void mbed_reset();
00008 
00009 void* operator new(size_t size) throw()
00010 {   
00011     void *ptr;
00012  
00013     ptr = malloc(size);
00014     return ptr;
00015 }
00016  
00017 void operator delete(void *ptr) throw()
00018 {
00019    free(ptr);
00020 }
00021  
00022 void operator delete[](void *ptr) throw()
00023 {
00024    free(ptr);
00025 }
00026 
00027 int main() {
00028     //pc.baud(460800);    // I like a snappy terminal, so crank it up!
00029     int f = Free();
00030     pc.printf("\r\nBlinky eating memory - Build " __DATE__ " " __TIME__ "\r\n");
00031     pc.printf("  %d bytes free\r\n", f);
00032     int i = 2000;
00033     int total = 0;
00034     
00035     while(1) {
00036         myled = 1;
00037         wait(0.2);
00038         pc.printf("Allocating %d bytes in addition to %d already allocated.\r\n", i, total);
00039         char * p = new char [i];      // This never returns after 24000
00040         //char * p = (char *)malloc(i);     // This fails gracefully with NULL return after 24000
00041         pc.printf("  %d bytes free.\r\n", Free());
00042         __heapvalid((__heapprt)fprintf, stdout, 0);
00043         if (p) {
00044             total += i;
00045             pc.printf("  Success! \r\n");
00046         } else {
00047             pc.printf("  Failed...\r\n");
00048             break;
00049         }
00050         myled = 0;
00051         wait(0.2);
00052     }
00053     pc.printf("done.\r\n");
00054     while (!pc.readable()) {}
00055     mbed_reset();
00056 }