// Function for loop trigger void taskMainPidLoopCheck(void) { static bool runTaskMainSubprocesses; static uint8_t pidUpdateCountdown; cycleTime = getTaskDeltaTime(TASK_SELF); if (debugMode == DEBUG_CYCLETIME) { debug[0] = cycleTime; debug[1] = averageSystemLoadPercent; } if (runTaskMainSubprocesses) { subTaskMainSubprocesses(); runTaskMainSubprocesses = false; } gyroUpdate(); if (pidUpdateCountdown) { pidUpdateCountdown--; } else { pidUpdateCountdown = setPidUpdateCountDown(); subTaskPidController(); subTaskMotorUpdate(); runTaskMainSubprocesses = true; } }
void taskPid(void) { gyroReadyCounter = 0; static uint32_t previousPidUpdateTime; pidDeltaUs = currentTime - previousPidUpdateTime; previousPidUpdateTime = currentTime; if (debugMode == DEBUG_PIDLOOP) { debug[0] = pidDeltaUs; } subTaskPidController(); subTaskMotorUpdate(); subTaskMainSubprocesses(); if (debugMode == DEBUG_GYRO_SYNC) { debug[2] = pidDeltaUs; debug[3]++; } #ifdef VTX if (canUpdateVTX()) { handleVTXControlButton(); } #endif }
// Function for loop trigger void taskMainPidLoop(timeUs_t currentTimeUs) { static bool runTaskMainSubprocesses; static uint8_t pidUpdateCountdown; #if defined(SIMULATOR_BUILD) && defined(SIMULATOR_GYROPID_SYNC) if(lockMainPID() != 0) return; #endif if (debugMode == DEBUG_CYCLETIME) { debug[0] = getTaskDeltaTime(TASK_SELF); debug[1] = averageSystemLoadPercent; } if (runTaskMainSubprocesses) { subTaskMainSubprocesses(currentTimeUs); runTaskMainSubprocesses = false; } // DEBUG_PIDLOOP, timings for: // 0 - gyroUpdate() // 1 - pidController() // 2 - subTaskMainSubprocesses() // 3 - subTaskMotorUpdate() uint32_t startTime = 0; if (debugMode == DEBUG_PIDLOOP) {startTime = micros();} gyroUpdate(); DEBUG_SET(DEBUG_PIDLOOP, 0, micros() - startTime); if (pidUpdateCountdown) { pidUpdateCountdown--; } else { pidUpdateCountdown = setPidUpdateCountDown(); subTaskPidController(currentTimeUs); subTaskMotorUpdate(); runTaskMainSubprocesses = true; } }