mirror of
https://github.com/betaflight/betaflight.git
synced 2025-07-16 12:55:19 +03:00
fix for 32bit overflow of currentTime killing baro/mag after 72 minutes (yes, someone noticed)
thanks to enots @ feenode. git-svn-id: https://afrodevices.googlecode.com/svn/trunk/baseflight@194 7c89a4a9-59b9-e629-4cfe-3a2d53b20e61
This commit is contained in:
parent
e894dba995
commit
9a842f6bb0
3 changed files with 9 additions and 9 deletions
|
@ -268,7 +268,7 @@ void getEstimatedAltitude(void)
|
|||
int32_t temp32;
|
||||
int16_t last;
|
||||
|
||||
if (currentTime < deadLine)
|
||||
if ((int32_t)(currentTime - deadLine) < 0)
|
||||
return;
|
||||
deadLine = currentTime + UPDATE_INTERVAL;
|
||||
|
||||
|
|
12
src/mw.c
12
src/mw.c
|
@ -176,14 +176,14 @@ void annexCode(void)
|
|||
#ifdef LEDRING
|
||||
if (feature(FEATURE_LED_RING)) {
|
||||
static uint32_t LEDTime;
|
||||
if (currentTime > LEDTime) {
|
||||
if ((int32_t)(currentTime - LEDTime) >= 0) {
|
||||
LEDTime = currentTime + 50000;
|
||||
ledringState();
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
if (currentTime > calibratedAccTime) {
|
||||
if ((int32_t)(currentTime - calibratedAccTime) >= 0) {
|
||||
if (!f.SMALL_ANGLES_25) {
|
||||
f.ACC_CALIBRATED = 0; // the multi uses ACC and is not calibrated or is too much inclinated
|
||||
LED0_TOGGLE;
|
||||
|
@ -197,7 +197,7 @@ void annexCode(void)
|
|||
|
||||
if (sensors(SENSOR_GPS)) {
|
||||
static uint32_t GPSLEDTime;
|
||||
if (currentTime > GPSLEDTime && (GPS_numSat >= 5)) {
|
||||
if ((int32_t)(currentTime - GPSLEDTime) >= 0 && (GPS_numSat >= 5)) {
|
||||
GPSLEDTime = currentTime + 150000;
|
||||
LED1_TOGGLE;
|
||||
}
|
||||
|
@ -270,7 +270,7 @@ void loop(void)
|
|||
if (spektrumFrameComplete())
|
||||
computeRC();
|
||||
|
||||
if (currentTime > rcTime) { // 50Hz
|
||||
if ((int32_t)(currentTime - rcTime) >= 0) { // 50Hz
|
||||
rcTime = currentTime + 20000;
|
||||
// TODO clean this up. computeRC should handle this check
|
||||
if (!feature(FEATURE_SPEKTRUM))
|
||||
|
@ -523,13 +523,13 @@ void loop(void)
|
|||
}
|
||||
|
||||
currentTime = micros();
|
||||
if (cfg.looptime == 0 || currentTime > loopTime) {
|
||||
if (cfg.looptime == 0 || (int32_t)(currentTime - loopTime) >= 0) {
|
||||
loopTime = currentTime + cfg.looptime;
|
||||
|
||||
computeIMU();
|
||||
// Measure loop rate just afer reading the sensors
|
||||
currentTime = micros();
|
||||
cycleTime = currentTime - previousTime;
|
||||
cycleTime = (int32_t)(currentTime - previousTime);
|
||||
previousTime = currentTime;
|
||||
|
||||
#ifdef MPU6050_DMP
|
||||
|
|
|
@ -243,7 +243,7 @@ void Baro_update(void)
|
|||
{
|
||||
int32_t pressure;
|
||||
|
||||
if (currentTime < baroDeadline)
|
||||
if ((int32_t)(currentTime - baroDeadline) < 0)
|
||||
return;
|
||||
|
||||
baroDeadline = currentTime;
|
||||
|
@ -414,7 +414,7 @@ void Mag_getADC(void)
|
|||
static int16_t magZeroTempMax[3];
|
||||
uint32_t axis;
|
||||
|
||||
if (currentTime < t)
|
||||
if ((int32_t)(currentTime - t) < 0)
|
||||
return; //each read is spaced by 100ms
|
||||
t = currentTime + 100000;
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue