GPerlValue GPerlJITCompiler::run(jit_function_t func, GPerlValue *args, JITParam *param) { GPerlValue ret; int argc = param->argc; void *jit_args[argc]; for (int i = 0; i < argc; i++) { switch (param->arg_types[i]) { case Int: jit_args[i] = &args[i].ivalue; break; case Double: jit_args[i] = &args[i].dvalue; break; case String: break; case Object: break; default: break; } } switch (param->return_type) { case Int: { unsigned int rvalue; jit_function_apply(func, jit_args, &rvalue); DBG_PL("rvalue = [%d]\n", rvalue); INT_init(ret, rvalue); break; } case Double: { double rvalue; jit_function_apply(func, jit_args, &rvalue); DBG_PL("rvalue = [%f]\n", rvalue); DOUBLE_init(ret, rvalue); break; } case String: break; case Object: break; default: break; } return ret; }
int main(){ first_time_boot(); //first time boot parameters read_config(); //nuskaitom config is eeprom //------------- I/O nustatymai ------------------ //LED PORTDDR(LED_PORT) |= _BV(LED1_BIT); LED_PORT &= ~_BV(LED1_BIT); PORTDDR(LED_PORT) |= _BV(LED2_BIT); LED_PORT &= ~_BV(LED2_BIT); PORTDDR(LED_PORT) |= _BV(LED3_BIT); LED_PORT &= ~_BV(LED3_BIT); PORTDDR(LCD_LED_PORT) |= _BV(LCD_LED_BIT); //LCD pasvietimas LCD_LED_PORT |= _BV(LCD_LED_BIT); //ijungiam LCD pasvietimas //USART DDRD|=_BV(PD1); //TX PORTD|=_BV(PD1); DDRD&=~_BV(PD0); //RX //ROT ENCODER DDRD&=~_BV(PD3); //INT1 PORTD|=_BV(PD3); DDRD&=~_BV(PD4); PORTD|=_BV(PD4); //ROT ENCODER BUTTON DDRB&=~_BV(PB6); PORTB|=_BV(PB6); //PIR DDRD&=~_BV(PD2); //INT0 // PORTD|=_BV(PD2); //PWM OUT DDRB|=_BV(PB3); //----------------- initai ----------------------------- init_uart(UBRR_VAL); lcd_init(LCD_DISP_ON); INT_init(); ADC_init(); timer_init_0(); timer_init_1(); start_timer1(); // TIMSK |=(_BV(OCIE1A)); //iddle timmer on apie(); //puslapiai(); //Nustatom PWM mode // TCCR2=0x6B; //6E; // OCR2=EEPROM_read(24); // OCR2 is EEPROM work_mode=EEPROM_read(25); wmode(work_mode); show_work_mode(); #if debug_mode send_string("OCR2 eeprome: "); send_string(itoa(OCR2, buff, 10)); send_string("\n\r"); #endif //naudojam ADC nuskaitymui // start_timer0(); _delay_ms(200); LCD_LED_PORT &= ~_BV(LCD_LED_BIT); //isjungiam LCD pasvietima sei(); //fade_in(); //fade_out(); while(5){ PORTDDR(LED_PORT)^= (1<<LED3_BIT); // _delay_ms(50); //-------------------- to go into main menu 00-------------------- // if (bit_is_clear(PINB, PB6)){ // lcd_light=1; // } if(meniu==0 && config==0 && read_keypad()==1){ #if debug_mode PORTDDR(LED_PORT)^= (1<<LED2_BIT); send_string("nuspausta knopke\n\r"); #endif if(lcd_light==0) { clock_second=0; clock_millisecond=0; lcd_light=1; LCD_LED_PORT |= _BV(LCD_LED_BIT); //ijungiam LCD pasvietima } else{ LCD_LED_PORT |= _BV(LCD_LED_BIT); //ijungiam LCD pasvietima meniu=1; menu_page=0; sub_menu_page=0; lcd_light=0; puslapiai(); } #if debug_mode debug_meniu(); #endif } //-------------------- main and sub menu routine -------------- while(meniu!=0 && config==0){ if(read_keypad()==1){ if(meniu==1 && config==0){ if(menu_page<4){ //2inis configas (on/off tipo) meniu=2; sub_menu_page=0; puslapiai_2(); #if debug_mode debug_meniu(); #endif } else if (menu_page==4){ //isejimas i configa meniu=3; config=1; read_config(); //nuskaitom config parametrus is eeprom puslapiai_config(); #if debug_mode debug_meniu(); #endif } //exit meniu punktas else if (menu_page==5){ //iseijimas i work_mode(); meniu=0; config=0; show_work_mode(); LCD_LED_PORT &= ~_BV(LCD_LED_BIT); //isjungiam LCD pasvietima #if debug_mode debug_meniu(); #endif } else meniu=meniu; } //-------------------- end of main menu routine -------------- //-------------------- start of sub menu routine -------------- else if (meniu==2 && config==0){ //2inis configas if(sub_menu_page==1) { //OFF vektorius visiems meniu if(menu_page!=4){ meniu=1; work_mode=0; //OFF - wmode EEPROM_write(25, work_mode); wmode(work_mode); puslapiai(); #if debug_mode debug_meniu(); #endif } } else if (sub_menu_page==0){ //ON vektorius if(menu_page==0){ //ON/OFF meniu punkte work_mode=1; //ON - wmode EEPROM_write(25, work_mode); meniu=0; wmode(work_mode); show_work_mode(); _delay_ms(200); LCD_LED_PORT &= ~_BV(LCD_LED_BIT); //isjungiam LCD pasvietima #if debug_mode debug_meniu(); #endif } else if (menu_page==1){ //PIR meniu punktas work_mode=2; //PIR - wmode EEPROM_write(25, work_mode); meniu=0; show_work_mode(); wmode(work_mode); _delay_ms(200); LCD_LED_PORT &= ~_BV(LCD_LED_BIT); //isjungiam LCD pasvietima } else if (menu_page==2){ //PIR/LDR meniu punktas work_mode=3; //PIR/LDR - wmode EEPROM_write(25, work_mode); meniu=0; show_work_mode(); wmode(work_mode); _delay_ms(200); clock_second=0; clock_millisecond=0; lcd_light=1; //LCD_LED_PORT &= ~_BV(LCD_LED_BIT); //isjungiam LCD pasvietima #if debug_mode debug_meniu(); #endif } else if (menu_page==3){ //LDR meniu punktas work_mode=4; //LDR - wmode EEPROM_write(25, work_mode); meniu=0; show_work_mode(); wmode(work_mode); _delay_ms(200); LCD_LED_PORT &= ~_BV(LCD_LED_BIT); //isjungiam LCD pasvietima #if debug_mode debug_meniu(); #endif } } else meniu=meniu; } } } //-------------------- end of sub menu routine -------------- //-------------------------- config --------------------- while(meniu!=0 && config==1){ if(read_keypad()==1){ #if debug_mode PORTDDR(LED_PORT)^= (1<<LED1_BIT); send_string("nuspausta knopke confige\n\r"); #endif //config meniu vaiksciojimas: arba iseinam i main meniu arba nueinam i sub config meniu if(meniu==3 && config==1){ //exit meniu punktas if (config_menu_page==config_menu_page_max){ //iseijimas i work_mode(); meniu=1; config=0; config_menu_page=0; puslapiai(); #if debug_mode debug_meniu(); #endif } //nuejimas i sub config meniu (minPWM, maxPWM, timeOUT ir LDRth nustatymai) else if (config_menu_page!=config_menu_page_max){ meniu=3; config=2; //nuostato nustatymas (pasiziurim, kelintas fadein[] elementas atinka minPWM/maxPWM reiksme EEProme if (config_menu_page==0) nuostatas=nuostato_radimas(minPWM); else if (config_menu_page==1) nuostatas=nuostato_radimas(maxPWM); else nuostatas=nuostatas; puslapiai_config_2(); #if debug_mode debug_meniu(); #endif // break; } } else config=config; } } //---------------------- end of config ----------------------- //---------------------- sub config routine ------------------------- while(meniu!=0 && config==2){ if(read_keypad()==1){ #if debug_mode PORTDDR(LED_PORT)^= (1<<LED1_BIT); send_string("nuspausta knopke sub confige\n\r"); #endif //isejimas is sub configo meniu=3; config=1; nuostatas=0; puslapiai_config(); write_config(); //OCR2=EEPROM_read(24); timer2_set(EEPROM_read(24)); wmode(work_mode); //kad liktu tikrasis work_mode } else config=config; } //---------------------- end of sub config routine ------------------ } }