void *Scheduler::_timer_thread(void *arg) { Scheduler *sched = (Scheduler *)arg; uint32_t last_ran_overtime = 0; while (!sched->_hal_initialized) { sched->delay_microseconds(1000); } while (true) { sched->delay_microseconds(1000); // run registered timers sched->_run_timers(true); // process any pending RC output requests ((RCOutput *)hal.rcout)->timer_update(); if (qurt_ran_overtime && AP_HAL::millis() - last_ran_overtime > 2000) { last_ran_overtime = AP_HAL::millis(); printf("Overtime in task %d\n", (int)AP_Scheduler::current_task); hal.console->printf("Overtime in task %d\n", (int)AP_Scheduler::current_task); } } return nullptr; }
void Scheduler::_io_thread(void* arg) { Scheduler *sched = (Scheduler *)arg; chRegSetThreadName("apm_io"); while (!sched->_hal_initialized) { sched->delay_microseconds(1000); } uint32_t last_sd_start_ms = AP_HAL::millis(); while (true) { sched->delay_microseconds(1000); // run registered IO processes sched->_run_io(); if (!hal.util->get_soft_armed()) { // if sdcard hasn't mounted then retry it every 3s in the IO // thread when disarmed uint32_t now = AP_HAL::millis(); if (now - last_sd_start_ms > 3000) { last_sd_start_ms = now; sdcard_retry(); } } } }
void Scheduler::_rcin_thread(void *arg) { Scheduler *sched = (Scheduler *)arg; chRegSetThreadName("apm_rcin"); while (!sched->_hal_initialized) { sched->delay_microseconds(20000); } while (true) { sched->delay_microseconds(2500); ((RCInput *)hal.rcin)->_timer_tick(); } }
void Scheduler::_storage_thread(void* arg) { Scheduler *sched = (Scheduler *)arg; chRegSetThreadName("apm_storage"); while (!sched->_hal_initialized) { sched->delay_microseconds(10000); } while (true) { sched->delay_microseconds(10000); // process any pending storage writes hal.storage->_timer_tick(); } }
void Scheduler::_io_thread(void* arg) { Scheduler *sched = (Scheduler *)arg; chRegSetThreadName("apm_io"); while (!sched->_hal_initialized) { sched->delay_microseconds(1000); } while (true) { sched->delay_microseconds(1000); // run registered IO processes sched->_run_io(); } }
void Scheduler::_toneAlarm_thread(void *arg) { Scheduler *sched = (Scheduler *)arg; chRegSetThreadName("toneAlarm"); while (!sched->_hal_initialized) { sched->delay_microseconds(20000); } while (true) { sched->delay_microseconds(20000); // process tone command Util::from(hal.util)->_toneAlarm_timer_tick(); } }
void Scheduler::_storage_thread(void* arg) { Scheduler *sched = (Scheduler *)arg; sched->_storage_thread_ctx->name = "apm_storage"; while (!sched->_hal_initialized) { sched->delay_microseconds(10000); } while (true) { sched->delay_microseconds(10000); // process any pending storage writes ((Storage *)hal.storage)->_timer_tick(); } }
void *Scheduler::_io_thread(void *arg) { Scheduler *sched = (Scheduler *)arg; while (!sched->_hal_initialized) { sched->delay_microseconds(1000); } while (true) { sched->delay_microseconds(1000); // run registered IO processes sched->_run_io(); } return nullptr; }
void Scheduler::_uavcan_thread(void *arg) { Scheduler *sched = (Scheduler *)arg; chRegSetThreadName("apm_uavcan"); while (!sched->_hal_initialized) { sched->delay_microseconds(20000); } while (true) { sched->delay_microseconds(100); for (int i = 0; i < MAX_NUMBER_OF_CAN_INTERFACES; i++) { if(hal.can_mgr[i] != nullptr) { CANManager::from(hal.can_mgr[i])->_timer_tick(); } } } }
void Scheduler::_timer_thread(void *arg) { Scheduler *sched = (Scheduler *)arg; chRegSetThreadName("apm_timer"); while (!sched->_hal_initialized) { sched->delay_microseconds(1000); } while (true) { sched->delay_microseconds(1000); // run registered timers sched->_run_timers(); // process any pending RC output requests hal.rcout->timer_tick(); } }
void *Scheduler::_uart_thread(void *arg) { Scheduler *sched = (Scheduler *)arg; while (!sched->_hal_initialized) { sched->delay_microseconds(1000); } while (true) { sched->delay_microseconds(1000); // process any pending serial bytes //((UARTDriver *)hal.uartA)->timer_tick(); ((UARTDriver *)hal.uartB)->timer_tick(); ((UARTDriver *)hal.uartC)->timer_tick(); ((UARTDriver *)hal.uartD)->timer_tick(); ((UARTDriver *)hal.uartE)->timer_tick(); } return nullptr; }
void Scheduler::_timer_thread(void *arg) { Scheduler *sched = (Scheduler *)arg; sched->_timer_thread_ctx->name = "apm_timer"; while (!sched->_hal_initialized) { sched->delay_microseconds(1000); } while (true) { sched->delay_microseconds(1000); // run registered timers sched->_run_timers(true); // process any pending RC output requests //hal.rcout->timer_tick(); // process any pending RC input requests ((RCInput *)hal.rcin)->_timer_tick(); } }
void Scheduler::_uart_thread(void* arg) { Scheduler *sched = (Scheduler *)arg; sched->_uart_thread_ctx->name = "apm_uart"; while (!sched->_hal_initialized) { sched->delay_microseconds(1000); } while (true) { sched->delay_microseconds(1000); // process any pending serial bytes ((UARTDriver *)hal.uartA)->_timer_tick(); ((UARTDriver *)hal.uartB)->_timer_tick(); ((UARTDriver *)hal.uartC)->_timer_tick(); /*((UARTDriver *)hal.uartD)->_timer_tick(); ((UARTDriver *)hal.uartE)->_timer_tick(); ((UARTDriver *)hal.uartF)->_timer_tick();*/ #if HAL_WITH_IO_MCU uart_io._timer_tick(); #endif } }