int main (int argc, char ** argv) { uint64_t * p0; const char * source_fname; size_t embed_minimum_size; if (argc < 2) { fputs ("Usage: winloader.exe <program.prg> [args...]\n", stderr); return 1; } source_fname = argv[1]; embed_minimum_size = init_load (source_fname); p0 = VirtualAlloc (NULL, embed_minimum_size + MAX_HEAP_SIZE, MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE); assert (p0 != NULL); printf ("p0 = %p\n", p0); init_syscall ((((uint64_t) p0) + embed_minimum_size), (((uint64_t) p0) + embed_minimum_size + MAX_HEAP_SIZE)); do_load (p0, syscall_shim, source_fname); printf ("launch = %p\n\n\n\n", p0); go_shim (p0, argc - 1, &argv[1]); /* failure...! */ return 1; }
static void erl_init(int ncpu) { init_benchmarking(); #ifdef ERTS_SMP erts_system_block_init(); #endif erts_init_monitors(); erts_init_gc(); erts_init_time(); erts_init_sys_common_misc(); erts_init_process(ncpu); erts_init_scheduling(use_multi_run_queue, no_schedulers, no_schedulers_online); erts_init_cpu_topology(); /* Must be after init_scheduling */ H_MIN_SIZE = erts_next_heap_size(H_MIN_SIZE, 0); BIN_VH_MIN_SIZE = erts_next_heap_size(BIN_VH_MIN_SIZE, 0); erts_init_trace(); erts_init_binary(); erts_init_bits(); erts_init_fun_table(); init_atom_table(); init_export_table(); init_module_table(); init_register_table(); init_message(); erts_bif_info_init(); erts_ddll_init(); init_emulator(); erts_bp_init(); init_db(); /* Must be after init_emulator */ erts_bif_timer_init(); erts_init_node_tables(); init_dist(); erl_drv_thr_init(); init_io(); init_copy(); init_load(); erts_init_bif(); erts_init_bif_chksum(); erts_init_bif_binary(); erts_init_bif_re(); erts_init_unicode(); /* after RE to get access to PCRE unicode */ erts_delay_trap = erts_export_put(am_erlang, am_delay_trap, 2); erts_late_init_process(); #if HAVE_ERTS_MSEG erts_mseg_late_init(); /* Must be after timer (erts_init_time()) and thread initializations */ #endif #ifdef HIPE hipe_mode_switch_init(); /* Must be after init_load/beam_catches/init */ #endif packet_parser_init(); erl_nif_init(); }
void init_gen (void) { /* Get things ready. */ break_label = 0; continue_label = 0; next_label = 1; out_count = 2; if (compile_only) printf ("@i"); else init_load (); had_error = FALSE; did_gen = FALSE; set_genstr_size (64); }
int main(void) { // Initialize Timers, ADC, and clear bootloader, Arduino does these with init() in wiring.c initTimers(); //Timer0 Fast PWM mode, Timer1 & Timer2 Phase Correct PWM mode. init_ADC_single_conversion(EXTERNAL_AVCC); // warning AREF should only have a bypass cap init_uart0_after_bootloader(); // bootloader may have the UART setup // setup() // Set digital pins to control load init_load(); // Set digital pins to control solar init_pv(); // put ADC in free running Auto Trigger mode enable_ADC_auto_conversion(FREE_RUNNING); /* Initialize UART, it returns a pointer to FILE so redirect of stdin and stdout works*/ stdout = stdin = uartstream0_init(BAUD); /* Clear and setup the command buffer, (probably not needed at this point) */ initCommandBuffer(); sei(); // Enable global interrupts starts TIMER0, UART0, ADC and any other ISR's // this start up command should run cctest, e.g. after a reset. if (uart0_available() == 0) { strcpy_P(command_buf, PSTR("/0/cctest?")); command_done = 1; echo_on = 1; printf_P(PSTR("%s\r\n"), command_buf); } // loop() while(1) /* I am tyring to use non-blocking code */ { // check if character is available to assemble a command, e.g. non-blocking if ( (!command_done) && uart0_available() ) // command_done is an extern from parse.h { // get a character from stdin and use it to assemble a command AssembleCommand(getchar()); // address is the ascii value for '0' note: a null address will terminate the command string. StartEchoWhenAddressed('0'); } // check if a character is available, and if so flush transmit buffer and nuke the command in process. // A multi-drop bus can have another device start transmitting after getting an address byte so // the first byte is used as a warning, it is the onlly chance to detect a possible collision. if ( command_done && uart0_available() ) { // dump the transmit buffer to limit a collision uart0_flush(); initCommandBuffer(); //Enable the LT3652, which may have been turned off digitalWrite(SHUTDOWN, LOW); // trun off the load load_step(0); } // finish echo of the command line befor starting a reply (or the next part of a reply) if ( command_done && (uart0_availableForWrite() == UART_TX0_BUFFER_SIZE) ) { if ( !echo_on ) { // this happons when the address did not match initCommandBuffer(); } else { if (command_done == 1) { findCommand(); command_done = 10; } // do not overfill the serial buffer since that blocks looping, e.g. process a command in 32 byte chunks if ( (command_done >= 10) && (command_done < 250) ) { ProcessCmd(); } else { initCommandBuffer(); } } } } return 0; }
static void erl_init(int ncpu, int proc_tab_sz, int legacy_proc_tab, int port_tab_sz, int port_tab_sz_ignore_files, int legacy_port_tab) { init_benchmarking(); erts_init_monitors(); erts_init_time(); erts_init_sys_common_misc(); erts_init_process(ncpu, proc_tab_sz, legacy_proc_tab); erts_init_scheduling(no_schedulers, no_schedulers_online); erts_init_cpu_topology(); /* Must be after init_scheduling */ erts_init_gc(); /* Must be after init_scheduling */ erts_alloc_late_init(); H_MIN_SIZE = erts_next_heap_size(H_MIN_SIZE, 0); BIN_VH_MIN_SIZE = erts_next_heap_size(BIN_VH_MIN_SIZE, 0); erts_init_trace(); erts_init_binary(); erts_init_bits(); erts_code_ix_init(); erts_init_fun_table(); init_atom_table(); init_export_table(); init_module_table(); init_register_table(); init_message(); erts_bif_info_init(); erts_ddll_init(); init_emulator(); erts_ptab_init(); /* Must be after init_emulator() */ erts_bp_init(); init_db(); /* Must be after init_emulator */ erts_bif_timer_init(); erts_init_node_tables(); init_dist(); erl_drv_thr_init(); erts_init_async(); erts_init_io(port_tab_sz, port_tab_sz_ignore_files, legacy_port_tab); init_load(); erts_init_bif(); erts_init_bif_chksum(); erts_init_bif_binary(); erts_init_bif_re(); erts_init_unicode(); /* after RE to get access to PCRE unicode */ erts_init_external(); erts_delay_trap = erts_export_put(am_erlang, am_delay_trap, 2); erts_late_init_process(); #if HAVE_ERTS_MSEG erts_mseg_late_init(); /* Must be after timer (erts_init_time()) and thread initializations */ #endif #ifdef HIPE hipe_mode_switch_init(); /* Must be after init_load/beam_catches/init */ #endif packet_parser_init(); erl_nif_init(); }