From 9e2fd0e51ccc7e27f4e35155c4b08d08d75ca90d Mon Sep 17 00:00:00 2001 From: Martin Budden Date: Sat, 17 Dec 2016 08:10:46 +0000 Subject: [PATCH] Replaced use of power function --- src/main/common/maths.h | 1 + src/main/fc/mw.c | 3 +-- src/main/flight/pid.c | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/common/maths.h b/src/main/common/maths.h index 61675514ee..78fd819d77 100644 --- a/src/main/common/maths.h +++ b/src/main/common/maths.h @@ -20,6 +20,7 @@ #ifndef sq #define sq(x) ((x)*(x)) #endif +#define power3(x) ((x)*(x)*(x)) // Undefine this for use libc sinf/cosf. Keep this defined to use fast sin/cos approximations #define FAST_MATH // order 9 approximation diff --git a/src/main/fc/mw.c b/src/main/fc/mw.c index 0364878aa3..ad8201d203 100644 --- a/src/main/fc/mw.c +++ b/src/main/fc/mw.c @@ -147,7 +147,6 @@ bool isCalibrating() } #define RC_RATE_INCREMENTAL 14.54f -#define RC_EXPO_POWER 3 void calculateSetpointRate(int axis, int16_t rc) { float angleRate, rcRate, rcSuperfactor, rcCommandf; @@ -167,7 +166,7 @@ void calculateSetpointRate(int axis, int16_t rc) { if (rcExpo) { float expof = rcExpo / 100.0f; - rcCommandf = rcCommandf * powerf(rcInput[axis], RC_EXPO_POWER) * expof + rcCommandf * (1-expof); + rcCommandf = rcCommandf * power3(rcInput[axis]) * expof + rcCommandf * (1-expof); } angleRate = 200.0f * rcRate * rcCommandf; diff --git a/src/main/flight/pid.c b/src/main/flight/pid.c index 26dd218fed..a534223850 100644 --- a/src/main/flight/pid.c +++ b/src/main/flight/pid.c @@ -263,10 +263,10 @@ void pidController(const pidProfile_t *pidProfile, uint16_t max_angle_inclinatio dynC = c[axis]; if (setpointRate[axis] > 0) { if ((setpointRate[axis] - previousSetpoint[axis]) < previousSetpoint[axis]) - dynC = dynC * powerf(rcInput[axis], 2) * relaxFactor[axis] + dynC * (1-relaxFactor[axis]); + dynC = dynC * sq(rcInput[axis]) * relaxFactor[axis] + dynC * (1-relaxFactor[axis]); } else if (setpointRate[axis] < 0) { if ((setpointRate[axis] - previousSetpoint[axis]) > previousSetpoint[axis]) - dynC = dynC * powerf(rcInput[axis], 2) * relaxFactor[axis] + dynC * (1-relaxFactor[axis]); + dynC = dynC * sq(rcInput[axis]) * relaxFactor[axis] + dynC * (1-relaxFactor[axis]); } } const float rD = dynC * setpointRate[axis] - PVRate; // cr - y