David Smart
/
mbed_blinky_eats_memory
Revised test using private new/delete methods suggested in http://mbed.org/forum/mbed/post/24686/
main.cpp@0:63f4520f2953, 2014-06-11 (annotated)
- 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?
User | Revision | Line number | New 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 | } |