JVM test

Dependencies:   mbed

Committer:
lynxeyed_atsu
Date:
Sat Aug 24 07:00:51 2013 +0000
Revision:
5:047542b65d00
Parent:
2:03e5c29343d1
Child:
6:b9d0d96b052f
KL25Z JVM test

Who changed what in which revision?

UserRevisionLine numberNew contents of line
lynxeyed_atsu 5:047542b65d00 1
lynxeyed_atsu 5:047542b65d00 2 #include <stdio.h>
lynxeyed_atsu 5:047542b65d00 3 #include <string.h>
lynxeyed_atsu 5:047542b65d00 4
lynxeyed_atsu 5:047542b65d00 5 #include "ravem.h"
chris 0:cf8a48b1fb23 6
lynxeyed_atsu 5:047542b65d00 7 ///* Main Program */
lynxeyed_atsu 5:047542b65d00 8 int main (void) {
lynxeyed_atsu 5:047542b65d00 9
lynxeyed_atsu 5:047542b65d00 10 hardware_init();
lynxeyed_atsu 5:047542b65d00 11 uart_init(9600);
lynxeyed_atsu 5:047542b65d00 12 pool_init();
lynxeyed_atsu 5:047542b65d00 13
lynxeyed_atsu 5:047542b65d00 14 uart_print("LPC11U24 mbed JVM Start\r\n");
lynxeyed_atsu 5:047542b65d00 15 uart_print("please wait...\r\n\r\n");
chris 0:cf8a48b1fb23 16
lynxeyed_atsu 5:047542b65d00 17 int32_t thread_count = 0,lp,method_all_end;
lynxeyed_atsu 5:047542b65d00 18 // Initialize Operand Stack and local Register
lynxeyed_atsu 5:047542b65d00 19 class_st *p;
chris 1:eabc6f5b51d6 20
lynxeyed_atsu 5:047542b65d00 21 p = (class_st *)pool_alloc(sizeof(class_st) * 1);
lynxeyed_atsu 5:047542b65d00 22 if(p == NULL)uart_print("error!");
lynxeyed_atsu 5:047542b65d00 23 p[0] = seekCodeArrtibute(p[0], "main", 4); //main_attribute
lynxeyed_atsu 5:047542b65d00 24 p[0].field_mem_reg = NULL;
lynxeyed_atsu 5:047542b65d00 25 p[0].field_num = 0;
lynxeyed_atsu 5:047542b65d00 26 p[0].local_reg = (int *)pool_alloc(sizeof(int) * p[0].local_num);
lynxeyed_atsu 5:047542b65d00 27 p[0].op_stack_type = (int *)pool_alloc(sizeof(int) * p[0].stack_num);
lynxeyed_atsu 5:047542b65d00 28 p[0].op_stack = (int *)pool_alloc(sizeof(int) * p[0].stack_num);
lynxeyed_atsu 5:047542b65d00 29 p[0].op_stack_type[0] = 0;
lynxeyed_atsu 5:047542b65d00 30 p[0].threadCommand = Thread_Active;
lynxeyed_atsu 5:047542b65d00 31 p[0].myThreadNum = 0;
lynxeyed_atsu 5:047542b65d00 32
lynxeyed_atsu 5:047542b65d00 33
lynxeyed_atsu 5:047542b65d00 34 while(1){
lynxeyed_atsu 5:047542b65d00 35 for(lp = 0 ; lp < thread_count + 1 ;lp++){
lynxeyed_atsu 5:047542b65d00 36 if((p[lp].threadCommand == Thread_Active)||
lynxeyed_atsu 5:047542b65d00 37 (p[lp].threadCommand == Thread_inSleep)){
lynxeyed_atsu 5:047542b65d00 38 p[lp] = decodeVM(p[lp]);
lynxeyed_atsu 5:047542b65d00 39 }
lynxeyed_atsu 5:047542b65d00 40 }
lynxeyed_atsu 5:047542b65d00 41 switch(p[0].threadCommand){
lynxeyed_atsu 5:047542b65d00 42 case Thread_getInitMethodWithStack:
lynxeyed_atsu 5:047542b65d00 43 thread_count++;
lynxeyed_atsu 5:047542b65d00 44
lynxeyed_atsu 5:047542b65d00 45 p = (class_st *)pool_realloc((int *)p,sizeof(class_st)*(1 + thread_count));
lynxeyed_atsu 5:047542b65d00 46 if(p == NULL)uart_print("error!");
lynxeyed_atsu 5:047542b65d00 47 p[thread_count] = seekCodeArrtibute(p[thread_count], "<init>", 6); // init
lynxeyed_atsu 5:047542b65d00 48 p[thread_count].field_mem_reg = NULL;
lynxeyed_atsu 5:047542b65d00 49 p[thread_count].field_num = 0;
lynxeyed_atsu 5:047542b65d00 50 p[thread_count].local_reg = (int *)pool_alloc(sizeof(int) * p[thread_count].local_num);
lynxeyed_atsu 5:047542b65d00 51 p[thread_count].op_stack_type = (int *)pool_alloc(sizeof(int) * p[thread_count].stack_num);
lynxeyed_atsu 5:047542b65d00 52 p[thread_count].op_stack = (int *)pool_alloc(sizeof(int) * p[thread_count].stack_num);
lynxeyed_atsu 5:047542b65d00 53 p[thread_count].op_stack_type[0] = 0;
lynxeyed_atsu 5:047542b65d00 54 p[thread_count].threadCommand = Thread_init;
lynxeyed_atsu 5:047542b65d00 55
lynxeyed_atsu 5:047542b65d00 56 // copy stack -> local variable
lynxeyed_atsu 5:047542b65d00 57 for(lp = p[0].threadArg+1; lp != 0 ; lp--){
lynxeyed_atsu 5:047542b65d00 58 p[thread_count].local_reg[lp] = getIntegerFromOperandStack(p[0]);
lynxeyed_atsu 5:047542b65d00 59 }
lynxeyed_atsu 5:047542b65d00 60
lynxeyed_atsu 5:047542b65d00 61 while(p[thread_count].threadCommand != Thread_returned){
lynxeyed_atsu 5:047542b65d00 62 p[thread_count] = decodeVM(p[thread_count]);
lynxeyed_atsu 5:047542b65d00 63 }
lynxeyed_atsu 5:047542b65d00 64
lynxeyed_atsu 5:047542b65d00 65 p[thread_count].threadCommand = Thread_initIsDone;
lynxeyed_atsu 5:047542b65d00 66 p[0].threadCommand = Thread_Active;
lynxeyed_atsu 5:047542b65d00 67
lynxeyed_atsu 5:047542b65d00 68
lynxeyed_atsu 5:047542b65d00 69 // uart_print("Thread Active!\r\n");
lynxeyed_atsu 5:047542b65d00 70 //
lynxeyed_atsu 5:047542b65d00 71 break;
lynxeyed_atsu 5:047542b65d00 72
lynxeyed_atsu 5:047542b65d00 73 case Thread_getStartMethod:
lynxeyed_atsu 5:047542b65d00 74 for(lp = 0 ; lp <= thread_count + 1 ; lp++){
lynxeyed_atsu 5:047542b65d00 75 if(p[lp].threadCommand == Thread_initIsDone)break;
lynxeyed_atsu 5:047542b65d00 76 }
lynxeyed_atsu 5:047542b65d00 77
lynxeyed_atsu 5:047542b65d00 78 if(p[lp].threadCommand != Thread_initIsDone){
lynxeyed_atsu 5:047542b65d00 79 uart_print("new\r\n");
lynxeyed_atsu 5:047542b65d00 80 thread_count++;
lynxeyed_atsu 5:047542b65d00 81 p = (class_st *)pool_realloc((int *)p,sizeof(class_st)*(1+thread_count));
lynxeyed_atsu 5:047542b65d00 82 if(p == NULL)uart_print("error!");
lynxeyed_atsu 5:047542b65d00 83 lp = thread_count;
lynxeyed_atsu 5:047542b65d00 84
lynxeyed_atsu 5:047542b65d00 85 p[lp] = seekCodeArrtibute(p[lp], "run", 3); // run method(start() calls this method)
lynxeyed_atsu 5:047542b65d00 86
lynxeyed_atsu 5:047542b65d00 87 p[lp].local_reg = (int *)pool_alloc(sizeof(int) * p[lp].local_num);
lynxeyed_atsu 5:047542b65d00 88 if(p[lp].local_reg == NULL)uart_print("error!");
lynxeyed_atsu 5:047542b65d00 89 p[lp].op_stack_type = (int *)pool_alloc(sizeof(int) * p[lp].stack_num);
lynxeyed_atsu 5:047542b65d00 90 if(p[lp].op_stack_type == NULL)uart_print("error!");
lynxeyed_atsu 5:047542b65d00 91 p[lp].op_stack = (int *)pool_alloc( sizeof(int) * p[lp].stack_num);
lynxeyed_atsu 5:047542b65d00 92 if(p[lp].op_stack == NULL)uart_print("error!");
lynxeyed_atsu 5:047542b65d00 93 p[lp].op_stack_type[0] = 0;
lynxeyed_atsu 5:047542b65d00 94 p[lp].threadCommand = Thread_Active;
lynxeyed_atsu 5:047542b65d00 95 p[lp].myThreadNum = lp;
lynxeyed_atsu 5:047542b65d00 96 p[0].threadCommand = Thread_Active;
lynxeyed_atsu 5:047542b65d00 97 break;
lynxeyed_atsu 5:047542b65d00 98 }
lynxeyed_atsu 5:047542b65d00 99
lynxeyed_atsu 5:047542b65d00 100 p[lp] = seekCodeArrtibute(p[lp], "run", 3); // run method(start() calls this method)
lynxeyed_atsu 5:047542b65d00 101 if(p[lp].local_reg == NULL)uart_print("pointr error!\r\n");
lynxeyed_atsu 5:047542b65d00 102 p[lp].local_reg = (int *)pool_realloc(p[lp].local_reg, sizeof(int) * p[lp].local_num);
lynxeyed_atsu 5:047542b65d00 103 if(p[lp].local_reg == NULL)uart_print("pointr error!\r\n");
lynxeyed_atsu 5:047542b65d00 104 p[lp].op_stack_type = (int *)pool_realloc(p[lp].op_stack_type,sizeof(int) * p[lp].stack_num);
lynxeyed_atsu 5:047542b65d00 105 if(p[lp].op_stack_type == NULL)uart_print("pointr error!\r\n");
lynxeyed_atsu 5:047542b65d00 106 p[lp].op_stack = (int *)pool_realloc(p[lp].op_stack, sizeof(int) * p[lp].stack_num);
lynxeyed_atsu 5:047542b65d00 107 if(p[lp].op_stack == NULL)uart_print("pointr error!\r\n");
lynxeyed_atsu 5:047542b65d00 108 p[lp].op_stack_type[0] = 0;
lynxeyed_atsu 5:047542b65d00 109 p[lp].threadCommand = Thread_Active;
lynxeyed_atsu 5:047542b65d00 110 p[lp].myThreadNum = lp;
lynxeyed_atsu 5:047542b65d00 111 p[0].threadCommand = Thread_Active;
lynxeyed_atsu 5:047542b65d00 112
lynxeyed_atsu 5:047542b65d00 113 break;
chris 1:eabc6f5b51d6 114 }
lynxeyed_atsu 5:047542b65d00 115 method_all_end = 0;
lynxeyed_atsu 5:047542b65d00 116 for(lp = 0 ; lp < thread_count + 1 ; lp++){
lynxeyed_atsu 5:047542b65d00 117 if(p[lp].threadCommand != Thread_returned) method_all_end = method_all_end + 1;
lynxeyed_atsu 5:047542b65d00 118 }
lynxeyed_atsu 5:047542b65d00 119 if(method_all_end == 0) break;
chris 1:eabc6f5b51d6 120 }
lynxeyed_atsu 5:047542b65d00 121
lynxeyed_atsu 5:047542b65d00 122 // end
lynxeyed_atsu 5:047542b65d00 123 for(lp = 0; lp < thread_count + 1; lp++){
lynxeyed_atsu 5:047542b65d00 124 pool_free(p[lp].local_reg);
lynxeyed_atsu 5:047542b65d00 125 pool_free(p[lp].op_stack_type);
lynxeyed_atsu 5:047542b65d00 126 pool_free(p[lp].op_stack);
lynxeyed_atsu 5:047542b65d00 127 }
lynxeyed_atsu 5:047542b65d00 128 pool_free((int *)&p);
lynxeyed_atsu 5:047542b65d00 129
lynxeyed_atsu 5:047542b65d00 130 p = NULL;
lynxeyed_atsu 5:047542b65d00 131
lynxeyed_atsu 5:047542b65d00 132 uart_print("\r\n\r\nJVM Fin\r\n");
lynxeyed_atsu 5:047542b65d00 133 while(1);
lynxeyed_atsu 5:047542b65d00 134
lynxeyed_atsu 5:047542b65d00 135 }