xeye_ atsu
/
FRDM_RaVem_JVM
JVM test
main.cpp@5:047542b65d00, 2013-08-24 (annotated)
- 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?
User | Revision | Line number | New 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 | } |