#include "Copter.h" #define SCHED_TASK(func, rate_hz, max_time_micros) SCHED_TASK_CLASS(Copter, &copter, func, rate_hz, max_time_micros) /* scheduler table for fast CPUs - all regular tasks apart from the fast_loop() should be listed here, along with how often they should be called (in hz) and the maximum time they are expected to take (in microseconds) */ const AP_Scheduler::Task Copter::scheduler_tasks[] = { SCHED_TASK(rc_loop, 100, 130), SCHED_TASK(throttle_loop, 50, 75), SCHED_TASK(update_GPS, 50, 200), #if OPTFLOW == ENABLED SCHED_TASK_CLASS(OpticalFlow, &copter.optflow, update, 200, 160), #endif SCHED_TASK(update_batt_compass, 10, 120), SCHED_TASK_CLASS(RC_Channels, (RC_Channels*)&copter.g2.rc_channels, read_aux_all, 10, 50), SCHED_TASK(arm_motors_check, 10, 50), #if TOY_MODE_ENABLED == ENABLED SCHED_TASK_CLASS(ToyMode, &copter.g2.toy_mode, update, 10, 50), #endif SCHED_TASK(auto_disarm_check, 10, 50), SCHED_TASK(auto_trim, 10, 75), #if RANGEFINDER_ENABLED == ENABLED SCHED_TASK(read_rangefinder, 20, 100), #endif #if PROXIMITY_ENABLED == ENABLED SCHED_TASK_CLASS(AP_Proximity, &copter.g2.proximity, update, 100, 50), #endif
#define SCHED_TASK(func, _interval_ticks, _max_time_micros) SCHED_TASK_CLASS(Tracker, &tracker, func, _interval_ticks, _max_time_micros) /* scheduler table - all regular tasks apart from the fast_loop() should be listed here, along with how often they should be called (in 20ms units) and the maximum time they are expected to take (in microseconds) */ const AP_Scheduler::Task Tracker::scheduler_tasks[] = { SCHED_TASK(update_ahrs, 50, 1000), SCHED_TASK(read_radio, 50, 200), SCHED_TASK(update_tracking, 50, 1000), SCHED_TASK(update_GPS, 10, 4000), SCHED_TASK(update_compass, 10, 1500), SCHED_TASK_CLASS(AP_BattMonitor, &tracker.battery, read, 10, 1500), SCHED_TASK_CLASS(AP_Baro, &tracker.barometer, update, 10, 1500), SCHED_TASK(gcs_update, 50, 1700), SCHED_TASK(gcs_data_stream_send, 50, 3000), SCHED_TASK(compass_accumulate, 50, 1500), SCHED_TASK_CLASS(AP_Baro, &tracker.barometer, accumulate, 50, 900), SCHED_TASK(ten_hz_logging_loop, 10, 300), #if LOGGING_ENABLED == ENABLED SCHED_TASK_CLASS(DataFlash_Class, &tracker.DataFlash, periodic_tasks, 50, 300), #endif SCHED_TASK_CLASS(AP_InertialSensor, &tracker.ins, periodic, 50, 50), SCHED_TASK_CLASS(AP_Notify, &tracker.notify, update, 50, 100), SCHED_TASK(check_usb_mux, 10, 300), SCHED_TASK(gcs_retry_deferred, 50, 1000), SCHED_TASK(one_second_loop, 1, 3900), SCHED_TASK(compass_cal_update, 50, 100),
SCHED_TASK(read_radio, 50, 100), SCHED_TASK(check_short_failsafe, 50, 100), SCHED_TASK(update_speed_height, 50, 200), SCHED_TASK(update_flight_mode, 400, 100), SCHED_TASK(stabilize, 400, 100), SCHED_TASK(set_servos, 400, 100), SCHED_TASK(read_control_switch, 7, 100), SCHED_TASK(update_GPS_50Hz, 50, 300), SCHED_TASK(update_GPS_10Hz, 10, 400), SCHED_TASK(navigate, 10, 150), SCHED_TASK(update_compass, 10, 200), SCHED_TASK(read_airspeed, 10, 100), SCHED_TASK(update_alt, 10, 200), SCHED_TASK(adjust_altitude_target, 10, 200), SCHED_TASK(afs_fs_check, 10, 100), SCHED_TASK_CLASS(GCS, (GCS*)&plane._gcs, update_receive, 300, 500), SCHED_TASK_CLASS(GCS, (GCS*)&plane._gcs, update_send, 300, 500), SCHED_TASK_CLASS(AP_ServoRelayEvents, &plane.ServoRelayEvents, update_events, 50, 150), SCHED_TASK_CLASS(AP_BattMonitor, &plane.battery, read, 10, 300), SCHED_TASK_CLASS(AP_Baro, &plane.barometer, accumulate, 50, 150), SCHED_TASK(update_notify, 50, 300), SCHED_TASK(read_rangefinder, 50, 100), SCHED_TASK_CLASS(AP_ICEngine, &plane.g2.ice_control, update, 10, 100), SCHED_TASK(compass_cal_update, 50, 50), SCHED_TASK(accel_cal_update, 10, 50), #if OPTFLOW == ENABLED SCHED_TASK_CLASS(OpticalFlow, &plane.optflow, update, 50, 50), #endif SCHED_TASK(one_second_loop, 1, 400), SCHED_TASK(check_long_failsafe, 3, 400), SCHED_TASK(rpm_update, 10, 100),
#define SCHED_TASK(func, _interval_ticks, _max_time_micros) SCHED_TASK_CLASS(Rover, &rover, func, _interval_ticks, _max_time_micros) /* scheduler table - all regular tasks are listed here, along with how often they should be called (in Hz) and the maximum time they are expected to take (in microseconds) */ const AP_Scheduler::Task Rover::scheduler_tasks[] = { // Function name, Hz, us, SCHED_TASK(read_radio, 50, 200), SCHED_TASK(ahrs_update, 50, 1500), SCHED_TASK(read_rangefinders, 50, 200), SCHED_TASK(update_current_mode, 50, 200), SCHED_TASK(set_servos, 50, 200), SCHED_TASK(update_GPS, 50, 300), SCHED_TASK_CLASS(AP_Baro, &rover.barometer, update, 10, 200), SCHED_TASK_CLASS(AP_Beacon, &rover.g2.beacon, update, 50, 200), SCHED_TASK_CLASS(AP_Proximity, &rover.g2.proximity, update, 50, 200), SCHED_TASK(update_visual_odom, 50, 200), SCHED_TASK(update_wheel_encoder, 20, 200), SCHED_TASK(update_compass, 10, 200), SCHED_TASK(update_mission, 50, 200), SCHED_TASK(update_logging1, 10, 200), SCHED_TASK(update_logging2, 10, 200), SCHED_TASK(gcs_retry_deferred, 50, 1000), SCHED_TASK(gcs_update, 50, 1000), SCHED_TASK(gcs_data_stream_send, 50, 3000), SCHED_TASK(read_control_switch, 7, 200), SCHED_TASK(read_aux_switch, 10, 200), SCHED_TASK_CLASS(AP_BattMonitor, &rover.battery, read, 10, 300), SCHED_TASK_CLASS(AP_ServoRelayEvents, &rover.ServoRelayEvents, update_events, 50, 200),
// ArduSub scheduling, originally copied from ArduCopter #include "Sub.h" #define SCHED_TASK(func, rate_hz, max_time_micros) SCHED_TASK_CLASS(Sub, &sub, func, rate_hz, max_time_micros) /* scheduler table for fast CPUs - all regular tasks apart from the fast_loop() should be listed here, along with how often they should be called (in hz) and the maximum time they are expected to take (in microseconds) */ const AP_Scheduler::Task Sub::scheduler_tasks[] = { SCHED_TASK(fifty_hz_loop, 50, 75), SCHED_TASK(update_GPS, 50, 200), #if OPTFLOW == ENABLED SCHED_TASK_CLASS(OpticalFlow, &sub.optflow, update, 200, 160), #endif SCHED_TASK(update_batt_compass, 10, 120), SCHED_TASK(read_rangefinder, 20, 100), SCHED_TASK(update_altitude, 10, 100), SCHED_TASK(three_hz_loop, 3, 75), SCHED_TASK(update_turn_counter, 10, 50), SCHED_TASK_CLASS(AP_Baro, &sub.barometer, accumulate, 50, 90), SCHED_TASK_CLASS(AP_Notify, &sub.notify, update, 50, 90), SCHED_TASK(one_hz_loop, 1, 100), SCHED_TASK_CLASS(GCS, (GCS*)&sub._gcs, update, 400, 180), SCHED_TASK(gcs_send_heartbeat, 1, 110), SCHED_TASK_CLASS(GCS, (GCS*)&sub._gcs, retry_deferred, 50, 550), SCHED_TASK_CLASS(GCS, (GCS*)&sub._gcs, data_stream_send, 50, 550), #if MOUNT == ENABLED SCHED_TASK_CLASS(AP_Mount, &sub.camera_mount, update, 50, 75),
SCHED_TASK(stabilize, 400, 100), SCHED_TASK(set_servos, 400, 100), SCHED_TASK(read_control_switch, 7, 100), SCHED_TASK(gcs_retry_deferred, 50, 500), SCHED_TASK(update_GPS_50Hz, 50, 300), SCHED_TASK(update_GPS_10Hz, 10, 400), SCHED_TASK(navigate, 10, 150), SCHED_TASK(update_compass, 10, 200), SCHED_TASK(read_airspeed, 10, 100), SCHED_TASK(update_alt, 10, 200), SCHED_TASK(adjust_altitude_target, 10, 200), SCHED_TASK(afs_fs_check, 10, 100), SCHED_TASK(gcs_update, 50, 500), SCHED_TASK(gcs_data_stream_send, 50, 500), SCHED_TASK(update_events, 50, 150), SCHED_TASK_CLASS(AP_BattMonitor, &plane.battery, read, 10, 300), SCHED_TASK_CLASS(AP_Baro, &plane.barometer, accumulate, 50, 150), SCHED_TASK(update_notify, 50, 300), SCHED_TASK(read_rangefinder, 50, 100), SCHED_TASK_CLASS(AP_ICEngine, &plane.g2.ice_control, update, 10, 100), SCHED_TASK(compass_cal_update, 50, 50), SCHED_TASK(accel_cal_update, 10, 50), #if OPTFLOW == ENABLED SCHED_TASK(update_optical_flow, 50, 50), #endif SCHED_TASK(one_second_loop, 1, 400), SCHED_TASK(check_long_failsafe, 3, 400), SCHED_TASK(rpm_update, 10, 100), SCHED_TASK(airspeed_ratio_update, 1, 100), #if MOUNT == ENABLED SCHED_TASK_CLASS(AP_Mount, &plane.camera_mount, update, 50, 100),
scheduler table for fast CPUs - all regular tasks apart from the fast_loop() should be listed here, along with how often they should be called (in hz) and the maximum time they are expected to take (in microseconds) */ const AP_Scheduler::Task Copter::scheduler_tasks[] = { SCHED_TASK(rc_loop, 100, 130), SCHED_TASK(throttle_loop, 50, 75), SCHED_TASK(update_GPS, 50, 200), #if OPTFLOW == ENABLED SCHED_TASK(update_optical_flow, 200, 160), #endif SCHED_TASK(update_batt_compass, 10, 120), SCHED_TASK(read_aux_all, 10, 50), SCHED_TASK(arm_motors_check, 10, 50), #if TOY_MODE_ENABLED == ENABLED SCHED_TASK_CLASS(ToyMode, &copter.g2.toy_mode, update, 10, 50), #endif SCHED_TASK(auto_disarm_check, 10, 50), SCHED_TASK(auto_trim, 10, 75), #if RANGEFINDER_ENABLED == ENABLED SCHED_TASK(read_rangefinder, 20, 100), #endif #if PROXIMITY_ENABLED == ENABLED SCHED_TASK_CLASS(AP_Proximity, &copter.g2.proximity, update, 100, 50), #endif #if BEACON_ENABLED == ENABLED SCHED_TASK_CLASS(AP_Beacon, &copter.g2.beacon, update, 400, 50), #endif #if VISUAL_ODOMETRY_ENABLED == ENABLED SCHED_TASK(update_visual_odom, 400, 50), #endif