Division per 0 in flight phases maths.

This commit is contained in:
bsongis
2011-12-13 07:30:07 +00:00
parent 423ca57f10
commit b491bf5dfe
+6 -13
View File
@@ -1483,6 +1483,7 @@ void perMain()
#define MAX_ACT 0xffff
static uint16_t fp_act[MAX_PHASES] = {0};
static uint16_t delta = 0;
static uint8_t s_fade_flight_phases = 0;
static uint8_t s_last_phase = 255;
uint8_t phase = getFlightPhase();
@@ -1492,23 +1493,18 @@ void perMain()
fp_act[phase] = MAX_ACT;
}
else {
if (g_model.phaseData[s_last_phase].fadeOut) {
s_fade_flight_phases |= (1<<s_last_phase);
uint8_t fadeTime = max(g_model.phaseData[s_last_phase].fadeOut, g_model.phaseData[phase].fadeIn);
if (fadeTime) {
s_fade_flight_phases |= (1<<s_last_phase) + (1<<phase);
delta = (MAX_ACT / 100) / fadeTime;
}
else {
fp_act[s_last_phase] = 0;
s_fade_flight_phases &= ~(1<<s_last_phase);
}
if (g_model.phaseData[phase].fadeIn) {
s_fade_flight_phases |= (1<<phase);
}
else {
fp_act[phase] = MAX_ACT;
s_fade_flight_phases &= ~(1<<phase);
s_fade_flight_phases &= ~((1<<s_last_phase) + (1<<phase));
}
}
s_last_phase = phase;
// printf("s_fade_flight_phases=%d\n", s_fade_flight_phases); fflush(stdout);
}
int16_t next_chans512[NUM_CHNOUT];
@@ -1555,10 +1551,8 @@ void perMain()
if (s_fade_flight_phases) {
for (uint8_t p=0; p<MAX_PHASES; p++) {
// printf("f_act[%d]=%d\n", p, fp_act[p]);
if (s_fade_flight_phases & (1<<p)) {
if (p == phase) {
uint16_t delta = (MAX_ACT / 100) / g_model.phaseData[p].fadeIn;
if (MAX_ACT - fp_act[p] > delta)
fp_act[p] += delta;
else {
@@ -1567,7 +1561,6 @@ void perMain()
}
}
else {
uint16_t delta = (MAX_ACT / 100) / g_model.phaseData[p].fadeOut;
if (fp_act[p] > delta)
fp_act[p] -= delta;
else {