JVM test

Dependencies:   mbed

Committer:
lynxeyed_atsu
Date:
Sat Sep 07 04:59:10 2013 +0000
Revision:
9:4ea7773ea2b0
Parent:
7:2a384a077520
added if_icmp* mnemonics

Who changed what in which revision?

UserRevisionLine numberNew contents of line
lynxeyed_atsu 5:047542b65d00 1 #include <stdio.h>
lynxeyed_atsu 5:047542b65d00 2 #include "pool.h"
lynxeyed_atsu 5:047542b65d00 3
lynxeyed_atsu 5:047542b65d00 4
lynxeyed_atsu 5:047542b65d00 5 int pl_buf[pool_size];
lynxeyed_atsu 5:047542b65d00 6 pool_all poal;
lynxeyed_atsu 5:047542b65d00 7
lynxeyed_atsu 7:2a384a077520 8
lynxeyed_atsu 7:2a384a077520 9 int *pool_memmove(int size){
lynxeyed_atsu 7:2a384a077520 10 int *pointr;
lynxeyed_atsu 7:2a384a077520 11 pool_each poeh;
lynxeyed_atsu 7:2a384a077520 12 size = (size + (sizeof(int) - 1)) / sizeof(int); //round int type alignment
lynxeyed_atsu 7:2a384a077520 13 poal.first_pointer = &pl_buf[0];
lynxeyed_atsu 7:2a384a077520 14
lynxeyed_atsu 7:2a384a077520 15 //seek pool_each header
lynxeyed_atsu 7:2a384a077520 16 pointr = poal.first_pointer + (int)((sizeof(pool_all) + (sizeof(int) - 1)) / sizeof(int));
lynxeyed_atsu 7:2a384a077520 17
lynxeyed_atsu 7:2a384a077520 18 //todo: add magic number
lynxeyed_atsu 7:2a384a077520 19 while(1){
lynxeyed_atsu 7:2a384a077520 20 memcpy(&poeh, pointr, sizeof(pool_each));
lynxeyed_atsu 7:2a384a077520 21 if((poeh.my_size == 0)||(pointr >= poal.next_pointer)){return NULL;}
lynxeyed_atsu 7:2a384a077520 22
lynxeyed_atsu 7:2a384a077520 23 if(poeh.available == memory_invalid){
lynxeyed_atsu 7:2a384a077520 24 if(size <= poeh.my_size){
lynxeyed_atsu 7:2a384a077520 25 // seek data_header
lynxeyed_atsu 7:2a384a077520 26 poeh.available = memory_available;
lynxeyed_atsu 7:2a384a077520 27 memcpy(pointr, &poeh, sizeof(pool_each));
lynxeyed_atsu 7:2a384a077520 28
lynxeyed_atsu 7:2a384a077520 29 pointr = pointr + (int)((sizeof(pool_each) + (sizeof(int) - 1)) / sizeof(int));
lynxeyed_atsu 7:2a384a077520 30 return pointr;
lynxeyed_atsu 7:2a384a077520 31 }
lynxeyed_atsu 7:2a384a077520 32 }
lynxeyed_atsu 7:2a384a077520 33 pointr = pointr + (int)((sizeof(pool_each) + (sizeof(int) - 1)) / sizeof(int)) + poeh.my_size;
lynxeyed_atsu 7:2a384a077520 34 }
lynxeyed_atsu 7:2a384a077520 35
lynxeyed_atsu 7:2a384a077520 36
lynxeyed_atsu 7:2a384a077520 37 }
lynxeyed_atsu 5:047542b65d00 38 void pool_init(void){
lynxeyed_atsu 5:047542b65d00 39 poal.first_pointer = &pl_buf[0];
lynxeyed_atsu 5:047542b65d00 40 poal.pool_size_all = pool_size;
lynxeyed_atsu 5:047542b65d00 41
lynxeyed_atsu 5:047542b65d00 42 poal.available = memory_available;
lynxeyed_atsu 5:047542b65d00 43 poal.next_pointer = &pl_buf[(int)((sizeof(pool_all) + (sizeof(int) - 1)) / sizeof(int))];
lynxeyed_atsu 5:047542b65d00 44 memcpy(poal.first_pointer, &poal, sizeof(pool_all)); //todo: change 'pl_buf' pointer
lynxeyed_atsu 5:047542b65d00 45
lynxeyed_atsu 5:047542b65d00 46 }
lynxeyed_atsu 5:047542b65d00 47
lynxeyed_atsu 5:047542b65d00 48 int *pool_alloc(int size){
lynxeyed_atsu 7:2a384a077520 49 pool_each poeh;
lynxeyed_atsu 7:2a384a077520 50 int *pointr;
lynxeyed_atsu 5:047542b65d00 51
lynxeyed_atsu 7:2a384a077520 52 if(NULL != (pointr = pool_memmove(size)))return pointr;
lynxeyed_atsu 5:047542b65d00 53 size = (size + (sizeof(int) - 1)) / sizeof(int); //round int type alignment
lynxeyed_atsu 7:2a384a077520 54
lynxeyed_atsu 5:047542b65d00 55 poal.pool_size_all = poal.pool_size_all - ((sizeof(pool_each) + (sizeof(int) - 1)) / sizeof(int)) - size; // int alignment
lynxeyed_atsu 5:047542b65d00 56
lynxeyed_atsu 5:047542b65d00 57 if(poal.pool_size_all <= 0){
lynxeyed_atsu 5:047542b65d00 58 uart_print("malloc error!\r\n");
lynxeyed_atsu 5:047542b65d00 59 return NULL;
lynxeyed_atsu 5:047542b65d00 60 }
lynxeyed_atsu 5:047542b65d00 61
lynxeyed_atsu 5:047542b65d00 62 poeh.my_size = size;
lynxeyed_atsu 5:047542b65d00 63 #if defined(USE_MAGIC)
lynxeyed_atsu 5:047542b65d00 64 poeh.magic_num = magic_value;
lynxeyed_atsu 5:047542b65d00 65 #endif
lynxeyed_atsu 5:047542b65d00 66 poeh.available = memory_available;
lynxeyed_atsu 5:047542b65d00 67 pointr = poal.next_pointer + (int)((sizeof(pool_each) + (sizeof(int) - 1)) / sizeof(int));
lynxeyed_atsu 5:047542b65d00 68
lynxeyed_atsu 5:047542b65d00 69 poeh.this_pointer = &pointr;
lynxeyed_atsu 5:047542b65d00 70
lynxeyed_atsu 5:047542b65d00 71 memcpy(poal.next_pointer, &poeh, sizeof(pool_each)); //todo: change 'pl_buf' pointer
lynxeyed_atsu 5:047542b65d00 72 poal.next_pointer = pointr + size;
lynxeyed_atsu 5:047542b65d00 73
lynxeyed_atsu 5:047542b65d00 74 return pointr;
lynxeyed_atsu 5:047542b65d00 75 }
lynxeyed_atsu 5:047542b65d00 76
lynxeyed_atsu 5:047542b65d00 77 void pool_free(int *pointr){
lynxeyed_atsu 5:047542b65d00 78 if (pointr == NULL)return;
lynxeyed_atsu 5:047542b65d00 79 pool_each poeh;
lynxeyed_atsu 5:047542b65d00 80
lynxeyed_atsu 5:047542b65d00 81 pointr = pointr - (int)((sizeof(pool_each) + (sizeof(int) - 1)) / sizeof(int)); // align header
lynxeyed_atsu 5:047542b65d00 82 memcpy(&poeh,pointr,sizeof(pool_each));
lynxeyed_atsu 5:047542b65d00 83 #if defined(USE_MAGIC)
lynxeyed_atsu 5:047542b65d00 84 if (poeh.magic_num != magic_value){
lynxeyed_atsu 5:047542b65d00 85 uart_print("pointer error\r\n");
lynxeyed_atsu 5:047542b65d00 86 return;
lynxeyed_atsu 5:047542b65d00 87 }
lynxeyed_atsu 5:047542b65d00 88 #endif
lynxeyed_atsu 5:047542b65d00 89 poeh.available = memory_invalid;
lynxeyed_atsu 5:047542b65d00 90 memcpy(pointr, &poeh, sizeof(pool_each));
lynxeyed_atsu 5:047542b65d00 91 return;
lynxeyed_atsu 5:047542b65d00 92
lynxeyed_atsu 5:047542b65d00 93 }
lynxeyed_atsu 5:047542b65d00 94
lynxeyed_atsu 5:047542b65d00 95 int *pool_realloc(int *pointr, int size){
lynxeyed_atsu 5:047542b65d00 96
lynxeyed_atsu 5:047542b65d00 97 int *new_pointr;
lynxeyed_atsu 5:047542b65d00 98
lynxeyed_atsu 5:047542b65d00 99 if(pointr == NULL)return NULL;
lynxeyed_atsu 5:047542b65d00 100 pool_each poeh;
lynxeyed_atsu 5:047542b65d00 101 size = (size + (sizeof(int) - 1)) / sizeof(int); //round int type alignment
lynxeyed_atsu 5:047542b65d00 102
lynxeyed_atsu 5:047542b65d00 103 pointr = pointr - (int)((sizeof(pool_each) + (sizeof(int) - 1)) / sizeof(int)); // align header
lynxeyed_atsu 5:047542b65d00 104
lynxeyed_atsu 5:047542b65d00 105 memcpy(&poeh,pointr,sizeof(pool_each));
lynxeyed_atsu 5:047542b65d00 106 #if defined(USE_MAGIC)
lynxeyed_atsu 5:047542b65d00 107 if (poeh.magic_num != magic_value){
lynxeyed_atsu 5:047542b65d00 108 uart_print("pointer error\r\n");
lynxeyed_atsu 5:047542b65d00 109 return NULL;
lynxeyed_atsu 5:047542b65d00 110 }
lynxeyed_atsu 5:047542b65d00 111 #endif
lynxeyed_atsu 5:047542b65d00 112 if (poeh.my_size >= size){
lynxeyed_atsu 5:047542b65d00 113
lynxeyed_atsu 5:047542b65d00 114 poeh.my_size = size;
lynxeyed_atsu 5:047542b65d00 115 memcpy(pointr, &poeh, sizeof(pool_each));
lynxeyed_atsu 5:047542b65d00 116 pointr = pointr + (int)((sizeof(pool_each) + (sizeof(int) - 1)) / sizeof(int)); // align pointer
lynxeyed_atsu 5:047542b65d00 117 return pointr;
lynxeyed_atsu 5:047542b65d00 118
lynxeyed_atsu 5:047542b65d00 119 }
lynxeyed_atsu 5:047542b65d00 120 poeh.available = memory_invalid;
lynxeyed_atsu 5:047542b65d00 121 memcpy(pointr, &poeh, sizeof(pool_each));
lynxeyed_atsu 5:047542b65d00 122
lynxeyed_atsu 5:047542b65d00 123 new_pointr = (int *)pool_alloc(sizeof(int) * size);
lynxeyed_atsu 5:047542b65d00 124 pointr = pointr + (int)((sizeof(pool_each) + (sizeof(int) - 1)) / sizeof(int)); // align pointer
lynxeyed_atsu 5:047542b65d00 125
lynxeyed_atsu 5:047542b65d00 126 memcpy(new_pointr, pointr, sizeof(int) * poeh.my_size);
lynxeyed_atsu 5:047542b65d00 127
lynxeyed_atsu 5:047542b65d00 128 return new_pointr;
lynxeyed_atsu 5:047542b65d00 129 }
lynxeyed_atsu 5:047542b65d00 130
lynxeyed_atsu 5:047542b65d00 131