From 24142bc0145cfd45512bfb9204fe76c21d8d1d0f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Beat=20K=C3=BCng?= Date: Tue, 6 Sep 2022 10:53:13 +0200 Subject: [PATCH] commander: RcCalibrationChecks: avoid param access on each cycle reduces cpu usage a bit --- .../checks/rcCalibrationCheck.cpp | 38 +++++++++++-------- .../checks/rcCalibrationCheck.hpp | 11 +++++- 2 files changed, 33 insertions(+), 16 deletions(-) diff --git a/src/modules/commander/HealthAndArmingChecks/checks/rcCalibrationCheck.cpp b/src/modules/commander/HealthAndArmingChecks/checks/rcCalibrationCheck.cpp index 62a7921dd3..90f210ed66 100644 --- a/src/modules/commander/HealthAndArmingChecks/checks/rcCalibrationCheck.cpp +++ b/src/modules/commander/HealthAndArmingChecks/checks/rcCalibrationCheck.cpp @@ -62,13 +62,11 @@ RcCalibrationChecks::RcCalibrationChecks() sprintf(nbuf, "RC%d_MAX", i + 1); _param_handles[i].max = param_find(nbuf); - sprintf(nbuf, "RC%d_REV", i + 1); - _param_handles[i].rev = param_find(nbuf); - sprintf(nbuf, "RC%d_DZ", i + 1); _param_handles[i].dz = param_find(nbuf); } + updateParams(); } void RcCalibrationChecks::checkAndReport(const Context &context, Report &reporter) @@ -82,18 +80,10 @@ void RcCalibrationChecks::checkAndReport(const Context &context, Report &reporte } for (unsigned i = 0; i < input_rc_s::RC_INPUT_MAX_CHANNELS; i++) { - /* initialize values to values failing the check */ - float param_min = 0.0f; - float param_max = 0.0f; - float param_trim = 0.0f; - float param_rev = 0.0f; - float param_dz = RC_INPUT_MAX_DEADZONE_US * 2.0f; - - param_get(_param_handles[i].min, ¶m_min); - param_get(_param_handles[i].trim, ¶m_trim); - param_get(_param_handles[i].max, ¶m_max); - param_get(_param_handles[i].rev, ¶m_rev); - param_get(_param_handles[i].dz, ¶m_dz); + float param_min = _param_values[i].min; + float param_max = _param_values[i].max; + float param_trim = _param_values[i].trim; + float param_dz = _param_values[i].dz; /* assert min..center..max ordering */ if (param_min < RC_INPUT_LOWEST_MIN_US) { @@ -175,3 +165,21 @@ void RcCalibrationChecks::checkAndReport(const Context &context, Report &reporte } } } + +void RcCalibrationChecks::updateParams() +{ + HealthAndArmingCheckBase::updateParams(); + + for (unsigned i = 0; i < input_rc_s::RC_INPUT_MAX_CHANNELS; i++) { + /* initialize values to values failing the check */ + _param_values[i].min = 0.0f; + _param_values[i].max = 0.0f; + _param_values[i].trim = 0.0f; + _param_values[i].dz = RC_INPUT_MAX_DEADZONE_US * 2.0f; + + param_get(_param_handles[i].min, &_param_values[i].min); + param_get(_param_handles[i].trim, &_param_values[i].trim); + param_get(_param_handles[i].max, &_param_values[i].max); + param_get(_param_handles[i].dz, &_param_values[i].dz); + } +} diff --git a/src/modules/commander/HealthAndArmingChecks/checks/rcCalibrationCheck.hpp b/src/modules/commander/HealthAndArmingChecks/checks/rcCalibrationCheck.hpp index fe9806246d..6a2d30a83f 100644 --- a/src/modules/commander/HealthAndArmingChecks/checks/rcCalibrationCheck.hpp +++ b/src/modules/commander/HealthAndArmingChecks/checks/rcCalibrationCheck.hpp @@ -47,14 +47,23 @@ public: void checkAndReport(const Context &context, Report &reporter) override; private: + void updateParams() override; + struct ParamHandles { param_t min; param_t trim; param_t max; - param_t rev; param_t dz; }; + struct ParamValues { + float min; + float trim; + float max; + float dz; + }; + ParamHandles _param_handles[input_rc_s::RC_INPUT_MAX_CHANNELS]; + ParamValues _param_values[input_rc_s::RC_INPUT_MAX_CHANNELS]; DEFINE_PARAMETERS_CUSTOM_PARENT(HealthAndArmingCheckBase, (ParamInt) _param_com_rc_in_mode