diff --git a/src/main/flight/pid.c b/src/main/flight/pid.c index 0f8d30fb9b..9cea9bad7a 100644 --- a/src/main/flight/pid.c +++ b/src/main/flight/pid.c @@ -72,9 +72,9 @@ pidControllerFuncPtr pid_controller = pidLegacy; // which pid controller are we pidControllerFuncPtr pid_controller = pidBetaflight; // which pid controller are we using #endif -void setTargetPidLooptime(uint8_t pidProcessDenom) +void setTargetPidLooptime(uint32_t pidLooptime) { - targetPidLooptime = gyro.targetLooptime * pidProcessDenom; + targetPidLooptime = pidLooptime; } void pidResetErrorGyroState(void) diff --git a/src/main/flight/pid.h b/src/main/flight/pid.h index 7a9092b622..a13c366a27 100644 --- a/src/main/flight/pid.h +++ b/src/main/flight/pid.h @@ -133,5 +133,5 @@ extern uint8_t PIDweight[3]; void pidSetController(pidControllerType_e type); void pidResetErrorGyroState(void); void pidStabilisationState(pidStabilisationState_e pidControllerState); -void setTargetPidLooptime(uint8_t pidProcessDenom); +void setTargetPidLooptime(uint32_t pidLooptime); diff --git a/src/main/main.c b/src/main/main.c index fa00e24bcb..608486d5b6 100644 --- a/src/main/main.c +++ b/src/main/main.c @@ -109,6 +109,8 @@ #include "config/config_profile.h" #include "config/config_master.h" +#define LOOPTIME_SUSPEND_TIME 5 // Prevent too long busy wait times + #ifdef USE_HARDWARE_REVISION_DETECTION #include "hardware_revision.h" #endif @@ -600,7 +602,7 @@ void init(void) masterConfig.gyro_sync_denom = 1; } - setTargetPidLooptime(masterConfig.pid_process_denom); // Initialize pid looptime + setTargetPidLooptime((gyro.targetLooptime + LOOPTIME_SUSPEND_TIME) * masterConfig.pid_process_denom); // Initialize pid looptime #ifdef BLACKBOX @@ -678,7 +680,7 @@ void main_init(void) /* Setup scheduler */ schedulerInit(); - rescheduleTask(TASK_GYROPID, gyro.targetLooptime + 5); // Add a littlebit of extra time to reduce busy wait + rescheduleTask(TASK_GYROPID, gyro.targetLooptime + LOOPTIME_SUSPEND_TIME); // Add a littlebit of extra time to reduce busy wait setTaskEnabled(TASK_GYROPID, true); if (sensors(SENSOR_ACC)) {