From f688227db6cf9d4dbc57701b3a15133ab458015f Mon Sep 17 00:00:00 2001 From: Bruce Luckcuck Date: Thu, 9 Apr 2020 19:40:18 -0400 Subject: [PATCH] Only enable PINIOBOX task when needed Previously the task was always enabled and there's no reason for it to be running if there are no boxID associations. Saves a few cycles by not running. But has a bigger effect on the scheduler by minimizing the number of active tasks when possible. --- src/main/fc/rc_modes.c | 17 ++++++++++++----- src/main/fc/tasks.c | 2 +- src/main/io/piniobox.c | 15 ++++++++++++++- src/main/io/piniobox.h | 1 + src/test/unit/arming_prevention_unittest.cc | 1 + src/test/unit/flight_failsafe_unittest.cc | 1 + src/test/unit/flight_imu_unittest.cc | 1 + src/test/unit/ledstrip_unittest.cc | 2 +- src/test/unit/link_quality_unittest.cc | 1 + src/test/unit/rc_controls_unittest.cc | 1 + src/test/unit/rcdevice_unittest.cc | 1 + src/test/unit/rx_ranges_unittest.cc | 2 ++ src/test/unit/rx_rx_unittest.cc | 2 ++ src/test/unit/vtx_unittest.cc | 1 + 14 files changed, 40 insertions(+), 8 deletions(-) diff --git a/src/main/fc/rc_modes.c b/src/main/fc/rc_modes.c index 49785ce80e..2a77b4c55c 100644 --- a/src/main/fc/rc_modes.c +++ b/src/main/fc/rc_modes.c @@ -24,22 +24,26 @@ #include "platform.h" -#include "rc_modes.h" - #include "common/bitarray.h" #include "common/maths.h" + #include "drivers/time.h" +#include "config/config.h" #include "config/feature.h" + +#include "fc/rc_controls.h" + +#include "io/piniobox.h" + #include "pg/pg.h" #include "pg/pg_ids.h" #include "pg/rx.h" -#include "config/config.h" -#include "fc/rc_controls.h" - #include "rx/rx.h" +#include "rc_modes.h" + #define STICKY_MODE_BOOT_DELAY_US 5e6 boxBitmask_t rcModeActivationMask; // one bit per mode defined in boxId_e @@ -249,4 +253,7 @@ void analyzeModeActivationConditions(void) activeMacArray[activeMacCount++] = i; } } +#ifdef USE_PINIOBOX + pinioBoxTaskControl(); +#endif } diff --git a/src/main/fc/tasks.c b/src/main/fc/tasks.c index 0df81eb6e4..035c507d29 100644 --- a/src/main/fc/tasks.c +++ b/src/main/fc/tasks.c @@ -336,7 +336,7 @@ void tasksInit(void) #endif #ifdef USE_PINIOBOX - setTaskEnabled(TASK_PINIOBOX, true); + pinioBoxTaskControl(); #endif #ifdef USE_CMS diff --git a/src/main/io/piniobox.c b/src/main/io/piniobox.c index 104b7fbe23..47e381341a 100644 --- a/src/main/io/piniobox.c +++ b/src/main/io/piniobox.c @@ -26,14 +26,16 @@ #include "build/debug.h" -#include "common/utils.h" #include "common/time.h" +#include "common/utils.h" #include "msp/msp_box.h" #include "pg/pinio.h" #include "pg/piniobox.h" +#include "scheduler/scheduler.h" + #include "piniobox.h" typedef struct pinioBoxRuntimeConfig_s { @@ -64,4 +66,15 @@ void pinioBoxUpdate(timeUs_t currentTimeUs) } } +void pinioBoxTaskControl(void) +{ + bool enableTask = false; + for (int i = 0; i < PINIO_COUNT; i++) { + if (pinioBoxRuntimeConfig.boxId[i] != BOXID_NONE && isModeActivationConditionPresent(pinioBoxRuntimeConfig.boxId[i])) { + enableTask = true; + break; + } + } + setTaskEnabled(TASK_PINIOBOX, enableTask); +} #endif diff --git a/src/main/io/piniobox.h b/src/main/io/piniobox.h index 76583c279a..d871b21771 100644 --- a/src/main/io/piniobox.h +++ b/src/main/io/piniobox.h @@ -22,3 +22,4 @@ void pinioBoxInit(const pinioBoxConfig_t *pinioBoxConfig); void pinioBoxUpdate(timeUs_t currentTimeUs); +void pinioBoxTaskControl(void); diff --git a/src/test/unit/arming_prevention_unittest.cc b/src/test/unit/arming_prevention_unittest.cc index 57aa920452..0a301eeb8f 100644 --- a/src/test/unit/arming_prevention_unittest.cc +++ b/src/test/unit/arming_prevention_unittest.cc @@ -1107,4 +1107,5 @@ extern "C" { void updateRcRefreshRate(timeUs_t) {}; uint16_t getAverageSystemLoadPercent(void) { return 0; } bool isMotorProtocolEnabled(void) { return true; } + void pinioBoxTaskControl(void) {} } diff --git a/src/test/unit/flight_failsafe_unittest.cc b/src/test/unit/flight_failsafe_unittest.cc index fa6f43269b..2fbdcba8b1 100644 --- a/src/test/unit/flight_failsafe_unittest.cc +++ b/src/test/unit/flight_failsafe_unittest.cc @@ -598,4 +598,5 @@ bool areSticksActive(uint8_t stickPercentLimit) { void beeperConfirmationBeeps(uint8_t beepCount) { UNUSED(beepCount); } bool crashRecoveryModeActive(void) { return false; } +void pinioBoxTaskControl(void) {} } diff --git a/src/test/unit/flight_imu_unittest.cc b/src/test/unit/flight_imu_unittest.cc index d5ea484951..a1648095a8 100644 --- a/src/test/unit/flight_imu_unittest.cc +++ b/src/test/unit/flight_imu_unittest.cc @@ -249,4 +249,5 @@ bool accGetAccumulationAverage(float *) { return false; } void mixerSetThrottleAngleCorrection(int) {}; bool gpsRescueIsRunning(void) { return false; } bool isFixedWing(void) { return false; } +void pinioBoxTaskControl(void) {} } diff --git a/src/test/unit/ledstrip_unittest.cc b/src/test/unit/ledstrip_unittest.cc index 260a0835ba..0a0e445ab2 100644 --- a/src/test/unit/ledstrip_unittest.cc +++ b/src/test/unit/ledstrip_unittest.cc @@ -396,5 +396,5 @@ bool isFlipOverAfterCrashActive(void) { return false; } void ws2811LedStripEnable(void) { } void setUsedLedCount(unsigned) { }; - +void pinioBoxTaskControl(void) {} } diff --git a/src/test/unit/link_quality_unittest.cc b/src/test/unit/link_quality_unittest.cc index 92d80bc704..5d94d300a8 100644 --- a/src/test/unit/link_quality_unittest.cc +++ b/src/test/unit/link_quality_unittest.cc @@ -456,6 +456,7 @@ extern "C" { void resetPPMDataReceivedState(void){ } void failsafeOnValidDataReceived(void) { } void failsafeOnValidDataFailed(void) { } + void pinioBoxTaskControl(void) { } void rxPwmInit(rxRuntimeState_t *rxRuntimeState, rcReadRawDataFnPtr *callback) { diff --git a/src/test/unit/rc_controls_unittest.cc b/src/test/unit/rc_controls_unittest.cc index 5c67d08d59..8d5c107b22 100644 --- a/src/test/unit/rc_controls_unittest.cc +++ b/src/test/unit/rc_controls_unittest.cc @@ -655,4 +655,5 @@ void resetTryingToArm(void) {} void setLedProfile(uint8_t profile) { UNUSED(profile); } uint8_t getLedProfile(void) { return 0; } void compassStartCalibration(void) {} +void pinioBoxTaskControl(void) {} } diff --git a/src/test/unit/rcdevice_unittest.cc b/src/test/unit/rcdevice_unittest.cc index 0392453244..e659555d21 100644 --- a/src/test/unit/rcdevice_unittest.cc +++ b/src/test/unit/rcdevice_unittest.cc @@ -994,4 +994,5 @@ extern "C" { bool cmsInMenu; uint32_t resumeRefreshAt = 0; int getArmingDisableFlags(void) {return 0;} + void pinioBoxTaskControl(void) {} } diff --git a/src/test/unit/rx_ranges_unittest.cc b/src/test/unit/rx_ranges_unittest.cc index fe13f36460..9ac70fd420 100644 --- a/src/test/unit/rx_ranges_unittest.cc +++ b/src/test/unit/rx_ranges_unittest.cc @@ -243,4 +243,6 @@ float pt1FilterApply(pt1Filter_t *filter, float input) return 0.0; } +void pinioBoxTaskControl(void) {} + } diff --git a/src/test/unit/rx_rx_unittest.cc b/src/test/unit/rx_rx_unittest.cc index 2243404cc5..03c008b584 100644 --- a/src/test/unit/rx_rx_unittest.cc +++ b/src/test/unit/rx_rx_unittest.cc @@ -254,4 +254,6 @@ extern "C" { UNUSED(input); return 0.0; } + + void pinioBoxTaskControl(void) {} } diff --git a/src/test/unit/vtx_unittest.cc b/src/test/unit/vtx_unittest.cc index 221a45e62b..5cdf19e2aa 100644 --- a/src/test/unit/vtx_unittest.cc +++ b/src/test/unit/vtx_unittest.cc @@ -192,4 +192,5 @@ extern "C" { void updateRcRefreshRate(timeUs_t) {}; uint16_t getAverageSystemLoadPercent(void) { return 0; } bool isMotorProtocolEnabled(void) { return false; } + void pinioBoxTaskControl(void) {} }