http://mbed.org/users/okini3939/notebook/mbed256_memory/

Dependencies:   mbed

Committer:
okini3939
Date:
Sat Jul 16 06:16:02 2011 +0000
Revision:
0:84a4229a4f34

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
okini3939 0:84a4229a4f34 1 #include "mbed.h"
okini3939 0:84a4229a4f34 2 #include <new>
okini3939 0:84a4229a4f34 3 #include <setjmp.h>
okini3939 0:84a4229a4f34 4
okini3939 0:84a4229a4f34 5 #define MAX 320
okini3939 0:84a4229a4f34 6
okini3939 0:84a4229a4f34 7 #undef USE_MALLOC // malloc or new
okini3939 0:84a4229a4f34 8
okini3939 0:84a4229a4f34 9 Serial pc(USBTX, USBRX);
okini3939 0:84a4229a4f34 10 jmp_buf jbuf;
okini3939 0:84a4229a4f34 11
okini3939 0:84a4229a4f34 12 void no_memory () {
okini3939 0:84a4229a4f34 13 pc.printf("new: no memory!\r\n");
okini3939 0:84a4229a4f34 14 longjmp(jbuf, 1);
okini3939 0:84a4229a4f34 15 // exit(-1);
okini3939 0:84a4229a4f34 16 }
okini3939 0:84a4229a4f34 17
okini3939 0:84a4229a4f34 18 int main() {
okini3939 0:84a4229a4f34 19 volatile int i; // volatile
okini3939 0:84a4229a4f34 20 int j;
okini3939 0:84a4229a4f34 21 char *dummy[MAX];
okini3939 0:84a4229a4f34 22
okini3939 0:84a4229a4f34 23 // set_new_handler(0); // return null
okini3939 0:84a4229a4f34 24 set_new_handler(no_memory); // new handler function
okini3939 0:84a4229a4f34 25
okini3939 0:84a4229a4f34 26 if (setjmp(jbuf) == 0) {
okini3939 0:84a4229a4f34 27 // allocate to memory
okini3939 0:84a4229a4f34 28
okini3939 0:84a4229a4f34 29 for (i = 0; i < MAX; i ++) {
okini3939 0:84a4229a4f34 30 pc.printf("%d, ", i);
okini3939 0:84a4229a4f34 31 #ifdef USE_MALLOC
okini3939 0:84a4229a4f34 32 dummy[i] = (char*)malloc(100);
okini3939 0:84a4229a4f34 33 #else
okini3939 0:84a4229a4f34 34 dummy[i] = new char[100];
okini3939 0:84a4229a4f34 35 #endif
okini3939 0:84a4229a4f34 36 if (dummy[i] == NULL) {
okini3939 0:84a4229a4f34 37 pc.printf("malloc: no memory!\r\n");
okini3939 0:84a4229a4f34 38 break;
okini3939 0:84a4229a4f34 39 }
okini3939 0:84a4229a4f34 40 }
okini3939 0:84a4229a4f34 41
okini3939 0:84a4229a4f34 42 } else {
okini3939 0:84a4229a4f34 43 // return from longjmp
okini3939 0:84a4229a4f34 44
okini3939 0:84a4229a4f34 45 }
okini3939 0:84a4229a4f34 46
okini3939 0:84a4229a4f34 47 pc.printf("allocated %d Bytes\r\n", i * 100);
okini3939 0:84a4229a4f34 48
okini3939 0:84a4229a4f34 49 for (j = 0; j < i; j ++) {
okini3939 0:84a4229a4f34 50 #ifdef USE_MALLOC
okini3939 0:84a4229a4f34 51 delete [] dummy[j];
okini3939 0:84a4229a4f34 52 #else
okini3939 0:84a4229a4f34 53 free(dummy[j]);
okini3939 0:84a4229a4f34 54 #endif
okini3939 0:84a4229a4f34 55 }
okini3939 0:84a4229a4f34 56
okini3939 0:84a4229a4f34 57 }