1
0
Fork 0
mirror of https://github.com/opentx/opentx.git synced 2025-07-14 03:49:52 +03:00
This commit is contained in:
Raphael Coeffic 2019-11-05 21:31:06 +01:00 committed by 3djc
parent bd97ae0b8e
commit a7aa7a68a8
3 changed files with 9 additions and 41 deletions

View file

@ -491,7 +491,6 @@ extern uint8_t flightModeTransitionLast;
void evalFlightModeMixes(uint8_t mode, uint8_t tick10ms); void evalFlightModeMixes(uint8_t mode, uint8_t tick10ms);
void evalMixes(uint8_t tick10ms); void evalMixes(uint8_t tick10ms);
void doMixerCalculations(); void doMixerCalculations();
void scheduleNextMixerCalculation(uint8_t module, uint16_t period_ms);
void checkTrims(); void checkTrims();
void perMain(); void perMain();

View file

@ -205,7 +205,7 @@ void enablePulsesExternalModule(uint8_t protocol)
#if defined(MULTIMODULE) #if defined(MULTIMODULE)
case PROTOCOL_CHANNELS_MULTIMODULE: case PROTOCOL_CHANNELS_MULTIMODULE:
extmoduleSerialStart(MULTIMODULE_BAUDRATE, MULTIMODULE_PERIOD * 2, true); extmoduleSerialStart(MULTIMODULE_BAUDRATE, MULTIMODULE_PERIOD * 2, true);
mixerSchedulerSetPeriod(EXTERNAL_MODULE, 6666/*MULTIMODULE_PERIOD*/); mixerSchedulerSetPeriod(EXTERNAL_MODULE, MULTIMODULE_PERIOD);
break; break;
#endif #endif
@ -234,14 +234,12 @@ void setupPulsesExternalModule(uint8_t protocol)
#if defined(PXX1) #if defined(PXX1)
case PROTOCOL_CHANNELS_PXX1_PULSES: case PROTOCOL_CHANNELS_PXX1_PULSES:
extmodulePulsesData.pxx.setupFrame(EXTERNAL_MODULE); extmodulePulsesData.pxx.setupFrame(EXTERNAL_MODULE);
scheduleNextMixerCalculation(EXTERNAL_MODULE, PXX_PULSES_PERIOD);
break; break;
#endif #endif
#if defined(PXX1) && defined(HARDWARE_EXTERNAL_MODULE_SIZE_SML) #if defined(PXX1) && defined(HARDWARE_EXTERNAL_MODULE_SIZE_SML)
case PROTOCOL_CHANNELS_PXX1_SERIAL: case PROTOCOL_CHANNELS_PXX1_SERIAL:
extmodulePulsesData.pxx_uart.setupFrame(EXTERNAL_MODULE); extmodulePulsesData.pxx_uart.setupFrame(EXTERNAL_MODULE);
scheduleNextMixerCalculation(EXTERNAL_MODULE, EXTMODULE_PXX1_SERIAL_PERIOD);
break; break;
#endif #endif
@ -249,14 +247,13 @@ void setupPulsesExternalModule(uint8_t protocol)
case PROTOCOL_CHANNELS_PXX2_HIGHSPEED: case PROTOCOL_CHANNELS_PXX2_HIGHSPEED:
case PROTOCOL_CHANNELS_PXX2_LOWSPEED: case PROTOCOL_CHANNELS_PXX2_LOWSPEED:
extmodulePulsesData.pxx2.setupFrame(EXTERNAL_MODULE); extmodulePulsesData.pxx2.setupFrame(EXTERNAL_MODULE);
scheduleNextMixerCalculation(EXTERNAL_MODULE, PXX2_PERIOD);
break; break;
#endif #endif
#if defined(SBUS) #if defined(SBUS)
case PROTOCOL_CHANNELS_SBUS: case PROTOCOL_CHANNELS_SBUS:
setupPulsesSbus(); setupPulsesSbus();
scheduleNextMixerCalculation(EXTERNAL_MODULE, SBUS_PERIOD); mixerSchedulerSetPeriod(EXTERNAL_MODULE, SBUS_PERIOD);
break; break;
#endif #endif
@ -265,28 +262,24 @@ void setupPulsesExternalModule(uint8_t protocol)
case PROTOCOL_CHANNELS_DSM2_DSM2: case PROTOCOL_CHANNELS_DSM2_DSM2:
case PROTOCOL_CHANNELS_DSM2_DSMX: case PROTOCOL_CHANNELS_DSM2_DSMX:
setupPulsesDSM2(); setupPulsesDSM2();
scheduleNextMixerCalculation(EXTERNAL_MODULE, DSM2_PERIOD);
break; break;
#endif #endif
#if defined(CROSSFIRE) #if defined(CROSSFIRE)
case PROTOCOL_CHANNELS_CROSSFIRE: case PROTOCOL_CHANNELS_CROSSFIRE:
setupPulsesCrossfire(); setupPulsesCrossfire();
scheduleNextMixerCalculation(EXTERNAL_MODULE, CROSSFIRE_PERIOD);
break; break;
#endif #endif
#if defined(MULTIMODULE) #if defined(MULTIMODULE)
case PROTOCOL_CHANNELS_MULTIMODULE: case PROTOCOL_CHANNELS_MULTIMODULE:
setupPulsesMultiExternalModule(); setupPulsesMultiExternalModule();
scheduleNextMixerCalculation(EXTERNAL_MODULE, MULTIMODULE_PERIOD);
break; break;
#endif #endif
#if defined(PPM) #if defined(PPM)
case PROTOCOL_CHANNELS_PPM: case PROTOCOL_CHANNELS_PPM:
setupPulsesPPMExternalModule(); setupPulsesPPMExternalModule();
scheduleNextMixerCalculation(EXTERNAL_MODULE, PPM_PERIOD(EXTERNAL_MODULE));
break; break;
#endif #endif
@ -359,16 +352,12 @@ bool setupPulsesInternalModule(uint8_t protocol)
#if defined(HARDWARE_INTERNAL_MODULE) && defined(PXX1) && !defined(INTMODULE_USART) #if defined(HARDWARE_INTERNAL_MODULE) && defined(PXX1) && !defined(INTMODULE_USART)
case PROTOCOL_CHANNELS_PXX1_PULSES: case PROTOCOL_CHANNELS_PXX1_PULSES:
intmodulePulsesData.pxx.setupFrame(INTERNAL_MODULE); intmodulePulsesData.pxx.setupFrame(INTERNAL_MODULE);
scheduleNextMixerCalculation(INTERNAL_MODULE, INTMODULE_PXX1_SERIAL_PERIOD);
return true; return true;
#endif #endif
#if defined(PXX1) && defined(INTMODULE_USART) #if defined(PXX1) && defined(INTMODULE_USART)
case PROTOCOL_CHANNELS_PXX1_SERIAL: case PROTOCOL_CHANNELS_PXX1_SERIAL:
intmodulePulsesData.pxx_uart.setupFrame(INTERNAL_MODULE); intmodulePulsesData.pxx_uart.setupFrame(INTERNAL_MODULE);
#if !defined(INTMODULE_HEARTBEAT)
scheduleNextMixerCalculation(INTERNAL_MODULE, INTMODULE_PXX1_SERIAL_PERIOD);
#endif
return true; return true;
#endif #endif
@ -377,13 +366,15 @@ bool setupPulsesInternalModule(uint8_t protocol)
{ {
bool result = intmodulePulsesData.pxx2.setupFrame(INTERNAL_MODULE); bool result = intmodulePulsesData.pxx2.setupFrame(INTERNAL_MODULE);
if (moduleState[INTERNAL_MODULE].mode == MODULE_MODE_SPECTRUM_ANALYSER || moduleState[INTERNAL_MODULE].mode == MODULE_MODE_POWER_METER) { if (moduleState[INTERNAL_MODULE].mode == MODULE_MODE_SPECTRUM_ANALYSER || moduleState[INTERNAL_MODULE].mode == MODULE_MODE_POWER_METER) {
scheduleNextMixerCalculation(INTERNAL_MODULE, PXX2_TOOLS_PERIOD); mixerSchedulerSetPeriod(INTERNAL_MODULE, PXX2_TOOLS_PERIOD);
} }
#if !defined(INTMODULE_HEARTBEAT)
else { else {
scheduleNextMixerCalculation(INTERNAL_MODULE, PXX2_PERIOD); #if !defined(INTMODULE_HEARTBEAT)
} mixerSchedulerSetPeriod(INTERNAL_MODULE, PXX2_PERIOD);
#else
mixerSchedulerSetPeriod(INTERNAL_MODULE, 0);
#endif #endif
}
return result; return result;
} }
#endif #endif
@ -391,14 +382,13 @@ bool setupPulsesInternalModule(uint8_t protocol)
#if defined(PCBTARANIS) && defined(INTERNAL_MODULE_PPM) #if defined(PCBTARANIS) && defined(INTERNAL_MODULE_PPM)
case PROTOCOL_CHANNELS_PPM: case PROTOCOL_CHANNELS_PPM:
setupPulsesPPMInternalModule(); setupPulsesPPMInternalModule();
scheduleNextMixerCalculation(INTERNAL_MODULE, PPM_PERIOD(INTERNAL_MODULE)); mixerSchedulerSetPeriod(INTERNAL_MODULE, PPM_PERIOD(INTERNAL_MODULE));
return true; return true;
#endif #endif
#if defined(INTERNAL_MODULE_MULTI) #if defined(INTERNAL_MODULE_MULTI)
case PROTOCOL_CHANNELS_MULTIMODULE: case PROTOCOL_CHANNELS_MULTIMODULE:
setupPulsesMultiInternalModule(); setupPulsesMultiInternalModule();
scheduleNextMixerCalculation(INTERNAL_MODULE, MULTIMODULE_PERIOD);
return true; return true;
#endif #endif

View file

@ -200,33 +200,12 @@ TASK_FUNCTION(mixerTask)
if (t0 > maxMixerDuration) if (t0 > maxMixerDuration)
maxMixerDuration = t0; maxMixerDuration = t0;
serialPrint("cnt = %d", EXTMODULE_TIMER->CNT);
sendSynchronousPulses(); sendSynchronousPulses();
} }
} }
} }
//TODO: remove that one
void scheduleNextMixerCalculation(uint8_t module, uint16_t period_ms)
{
// Schedule next mixer calculation time,
if (isModuleSynchronous(module)) {
nextMixerTime[module] += period_ms / RTOS_MS_PER_TICK;
if (nextMixerTime[module] < RTOS_GET_TIME()) {
// we are late ... let's add some small delay
nextMixerTime[module] = (uint32_t) RTOS_GET_TIME() + (period_ms / RTOS_MS_PER_TICK);
}
}
else {
// for now assume mixer calculation takes 2 ms.
nextMixerTime[module] = (uint32_t) RTOS_GET_TIME() + (period_ms / RTOS_MS_PER_TICK);
}
DEBUG_TIMER_STOP(debugTimerMixerCalcToUsage);
}
#define MENU_TASK_PERIOD_TICKS (50 / RTOS_MS_PER_TICK) // 50ms #define MENU_TASK_PERIOD_TICKS (50 / RTOS_MS_PER_TICK) // 50ms
#if defined(COLORLCD) && defined(CLI) #if defined(COLORLCD) && defined(CLI)