STATIC_INLINE void handle_periodic_tasks(void) { if (sys_time_check_and_ack_timer(main_periodic_tid)) { main_periodic(); } if (sys_time_check_and_ack_timer(modules_tid)) { modules_periodic_task(); } if (sys_time_check_and_ack_timer(radio_control_tid)) { radio_control_periodic_task(); } if (sys_time_check_and_ack_timer(failsafe_tid)) { failsafe_check(); } if (sys_time_check_and_ack_timer(electrical_tid)) { electrical_periodic(); } if (sys_time_check_and_ack_timer(telemetry_tid)) { telemetry_periodic(); } #if USE_BARO_BOARD if (sys_time_check_and_ack_timer(baro_tid)) { baro_periodic(); } #endif }
STATIC_INLINE void handle_periodic_tasks(void) { if (sys_time_check_and_ack_timer(main_periodic_tid)) { main_periodic(); #if PERIODIC_FREQUENCY == MODULES_FREQUENCY /* Use the main periodc freq timer for modules if the freqs are the same * This is mainly useful for logging each step. */ modules_periodic_task(); #else } /* separate timer for modules, since it has a different freq than main */ if (sys_time_check_and_ack_timer(modules_tid)) { modules_periodic_task(); #endif } if (sys_time_check_and_ack_timer(radio_control_tid)) { radio_control_periodic_task(); } if (sys_time_check_and_ack_timer(failsafe_tid)) { failsafe_check(); } if (sys_time_check_and_ack_timer(electrical_tid)) { electrical_periodic(); } if (sys_time_check_and_ack_timer(telemetry_tid)) { telemetry_periodic(); } #if USE_BARO_BOARD if (sys_time_check_and_ack_timer(baro_tid)) { baro_periodic(); } #endif }
void draw_scene() { static int first_run = 1; static rc_t rc; static est2User_t e2u; static sensors2Estimator_t s2e; static system_energy_t se; if (first_run == 1){ first_run = 0; /* set up telemetry stream */ initialize_visualizer_telemetry(&rc, &e2u, &s2e, &se); init_object_manager(); init_spline_geometry(); init_tether_vis(); init_spline_trajectory_vis(); init_wind_vis(); init_simple_model_vis(); init_path_vis(); } telemetry_periodic(); manage_high_score( &e2u, &rc); // Render GL stuff glClear(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT); // Clear The Screen And The Depth Buffer glPushMatrix(); // put the visualizer in NED glRotatef( 90.0f, 1.0f, 0.0f, 0.0f); draw_grid(); draw_object_manager_objects(); draw_tether(); draw_axes_from_euler(0.0f,0.0f,0.0f,0.0f,0.0f,-1.0f,30.0f,8.0f); // origin draw_all_spline_trajectories(); draw_spline_geometry( 10 ); draw_wind_est( &e2u ); draw_wind_vis( DT ); draw_simple_model_vis(); draw_path_vis(); draw_camera_focus(); // satellite imagery manage_imagery(); draw_text( &rc, &e2u, &s2e, &se, window_width, window_height, current_score, session_high_score ); glPopMatrix(); visualizer_talk( &s2e, &e2u, &rc); run_realtime( DT ); // swap the buffers to display, since double buffering is used. glutSwapBuffers(); }
STATIC_INLINE void handle_periodic_tasks( void ) { if (sys_time_check_and_ack_timer(main_periodic_tid)) main_periodic(); if (sys_time_check_and_ack_timer(radio_control_tid)) radio_control_periodic_task(); if (sys_time_check_and_ack_timer(failsafe_tid)) failsafe_check(); if (sys_time_check_and_ack_timer(electrical_tid)) electrical_periodic(); if (sys_time_check_and_ack_timer(baro_tid)) baro_periodic(); if (sys_time_check_and_ack_timer(telemetry_tid)) telemetry_periodic(); }
int main(void) { // Set the system clock to the full 120MHz uint32_t sysClkFreq = SysCtlClockFreqSet(SYSCTL_XTAL_25MHZ | SYSCTL_OSC_MAIN | SYSCTL_USE_PLL | SYSCTL_CFG_VCO_480, 120000000); debug_init(sysClkFreq); status_led_init(); network_driver_init(sysClkFreq); networking_init(); telemetry_init(); transducer_init(); thermocouple_init(); solenoid_init(); debug_print("Initialization complete. starting main loop.\r\n"); // Set up the SysTick timer and its interrupts SysTickPeriodSet(6000); // 40 kHz SysTickIntRegister(sys_tick); SysTickIntEnable(); SysTickEnable(); uint32_t loopIterations = 0; uint32_t frame_start = systick_clock; while(1) { status_led_periodic(); network_driver_periodic(); telemetry_periodic(); solenoid_periodic(); // debug_print_u32(systick_clock); //count loop iterations per second loopIterations++; if(systick_clock - frame_start >= 1000) { loops_per_second = loopIterations; loopIterations = 0; frame_start = systick_clock; } } }
STATIC_INLINE void handle_periodic_tasks(void) { if (sys_time_check_and_ack_timer(main_periodic_tid)) { main_periodic(); } if (sys_time_check_and_ack_timer(modules_tid)) { modules_periodic_task(); } if (sys_time_check_and_ack_timer(radio_control_tid)) { radio_control_periodic_task(); } if (sys_time_check_and_ack_timer(electrical_tid)) { electrical_periodic(); } if (sys_time_check_and_ack_timer(telemetry_tid)) { telemetry_periodic(); } }