The Big Refactoring of 2019: scheduler should not be global #655

This commit is contained in:
rusefi 2019-01-09 20:00:21 -05:00
parent b4f5714b66
commit 270af0c0ab
8 changed files with 40 additions and 55 deletions

View File

@ -13,11 +13,9 @@
#include "accel_enrichment.h" #include "accel_enrichment.h"
#include "thermistors.h" #include "thermistors.h"
#include "advance_map.h" #include "advance_map.h"
#include "event_queue.h"
extern int timeNowUs; extern int timeNowUs;
extern EnginePins enginePins; extern EnginePins enginePins;
extern EventQueue schedulingQueue;
extern int unitTestWarningCounter; extern int unitTestWarningCounter;
extern float testMafValue; extern float testMafValue;
extern engine_configuration_s activeConfiguration; extern engine_configuration_s activeConfiguration;

View File

@ -10,7 +10,7 @@
#include "global_execution_queue.h" #include "global_execution_queue.h"
// this global instance is used by integration tests via 'scheduleByTimestamp' global methods below // this global instance is used by integration tests via 'scheduleByTimestamp' global methods below
EventQueue schedulingQueue; static EventQueue schedulingQueue;
bool_t debugSignalExecutor = false; bool_t debugSignalExecutor = false;

View File

@ -7,10 +7,8 @@
#include "engine_math.h" #include "engine_math.h"
#include "test_fasterEngineSpinningUp.h" #include "test_fasterEngineSpinningUp.h"
#include "test_trigger_decoder.h" #include "test_trigger_decoder.h"
#include "event_queue.h"
#include "unit_test_framework.h" #include "unit_test_framework.h"
extern EventQueue schedulingQueue;
extern int timeNowUs; extern int timeNowUs;
void testFasterEngineSpinningUp() { void testFasterEngineSpinningUp() {

View File

@ -7,13 +7,11 @@
#include "global.h" #include "global.h"
#include "unit_test_framework.h" #include "unit_test_framework.h"
#include "event_queue.h"
#include "pwm_generator_logic.h" #include "pwm_generator_logic.h"
#define LOW_VALUE 0 #define LOW_VALUE 0
#define HIGH_VALUE 1 #define HIGH_VALUE 1
extern EventQueue schedulingQueue;
extern int timeNowUs; extern int timeNowUs;
static int expectedTimeOfNextEvent; static int expectedTimeOfNextEvent;

View File

@ -9,9 +9,6 @@
#include "engine_test_helper.h" #include "engine_test_helper.h"
#include "speed_density.h" #include "speed_density.h"
#include "test_speed_density.h" #include "test_speed_density.h"
#include "event_queue.h"
extern EventQueue schedulingQueue;
void testSpeedDensity(void) { void testSpeedDensity(void) {
printf("*************************************************** testSpeedDensity\r\n"); printf("*************************************************** testSpeedDensity\r\n");

View File

@ -7,10 +7,8 @@
#include "test_startOfCrankingPrimingPulse.h" #include "test_startOfCrankingPrimingPulse.h"
#include "test_trigger_decoder.h" #include "test_trigger_decoder.h"
#include "event_queue.h"
#include "unit_test_framework.h" #include "unit_test_framework.h"
extern EventQueue schedulingQueue;
extern int timeNowUs; extern int timeNowUs;
extern EnginePins enginePins; extern EnginePins enginePins;

View File

@ -247,8 +247,6 @@ static void testTriggerDecoder3(const char *msg, engine_type_e type, int synchPo
printTriggerDebug = false; printTriggerDebug = false;
} }
extern EventQueue schedulingQueue;
void testStartupFuelPumping(void) { void testStartupFuelPumping(void) {
printf("*************************************************** testStartupFuelPumping\r\n"); printf("*************************************************** testStartupFuelPumping\r\n");
EngineTestHelper eth(FORD_INLINE_6_1995); EngineTestHelper eth(FORD_INLINE_6_1995);
@ -750,7 +748,7 @@ static void setTestBug299(EngineTestHelper *eth) {
timeNowUs += MS2US(20); timeNowUs += MS2US(20);
schedulingQueue.executeAll(timeNowUs); engine->executor.executeAll(timeNowUs);
eth->firePrimaryTriggerFall(); eth->firePrimaryTriggerFall();
// fuel schedule - short pulses. and more realistic schedule this time // fuel schedule - short pulses. and more realistic schedule this time
// time...|-20.....|-10.....|0.......|10......|20 // time...|-20.....|-10.....|0.......|10......|20
@ -986,20 +984,20 @@ void testFuelSchedulerBug299smallAndMedium(void) {
eth.firePrimaryTriggerFall(); eth.firePrimaryTriggerFall();
schedulingQueue.executeAll(timeNowUs); engine->executor.executeAll(timeNowUs);
engine->periodicFastCallback(PASS_ENGINE_PARAMETER_SIGNATURE); engine->periodicFastCallback(PASS_ENGINE_PARAMETER_SIGNATURE);
eth.fireRise(20); eth.fireRise(20);
assertEqualsM("Queue.size#05", 7, engine->executor.size()); assertEqualsM("Queue.size#05", 7, engine->executor.size());
schedulingQueue.executeAll(timeNowUs); engine->executor.executeAll(timeNowUs);
eth.fireFall(20); eth.fireFall(20);
schedulingQueue.executeAll(timeNowUs); engine->executor.executeAll(timeNowUs);
timeNowUs += MS2US(20); timeNowUs += MS2US(20);
schedulingQueue.executeAll(timeNowUs); engine->executor.executeAll(timeNowUs);
eth.firePrimaryTriggerRise(); eth.firePrimaryTriggerRise();
engine->periodicFastCallback(PASS_ENGINE_PARAMETER_SIGNATURE); engine->periodicFastCallback(PASS_ENGINE_PARAMETER_SIGNATURE);
@ -1024,7 +1022,7 @@ void testFuelSchedulerBug299smallAndMedium(void) {
//// assertInjectorDownEvent("8@8", 8, MS2US(45), 1); //// assertInjectorDownEvent("8@8", 8, MS2US(45), 1);
//// assertInjectorDownEvent("8@9", 9, MS2US(55), 0); //// assertInjectorDownEvent("8@9", 9, MS2US(55), 0);
schedulingQueue.executeAll(timeNowUs); engine->executor.executeAll(timeNowUs);
unitTestValue = 0; unitTestValue = 0;
testMafValue = 0; testMafValue = 0;
@ -1088,7 +1086,7 @@ void testFuelSchedulerBug299smallAndLarge(void) {
assertEqualsM("Lqs#1", 4, engine->executor.size()); assertEqualsM("Lqs#1", 4, engine->executor.size());
timeNowUs += MS2US(20); timeNowUs += MS2US(20);
schedulingQueue.executeAll(timeNowUs); engine->executor.executeAll(timeNowUs);
// injector #1 is low before the test // injector #1 is low before the test
assertFalseM("injector@0", enginePins.injectors[0].currentLogicValue); assertFalseM("injector@0", enginePins.injectors[0].currentLogicValue);
@ -1113,11 +1111,11 @@ void testFuelSchedulerBug299smallAndLarge(void) {
// assertInjectorDownEvent("L04@8", 8, MS2US(50.0), 0); // assertInjectorDownEvent("L04@8", 8, MS2US(50.0), 0);
schedulingQueue.executeAll(timeNowUs + 1); engine->executor.executeAll(timeNowUs + 1);
// injector goes high... // injector goes high...
assertFalseM("injector@1", enginePins.injectors[0].currentLogicValue); assertFalseM("injector@1", enginePins.injectors[0].currentLogicValue);
schedulingQueue.executeAll(timeNowUs + MS2US(17.5) + 1); engine->executor.executeAll(timeNowUs + MS2US(17.5) + 1);
// injector does not go low too soon, that's a feature :) // injector does not go low too soon, that's a feature :)
assertTrueM("injector@2", enginePins.injectors[0].currentLogicValue); assertTrueM("injector@2", enginePins.injectors[0].currentLogicValue);
@ -1133,13 +1131,13 @@ void testFuelSchedulerBug299smallAndLarge(void) {
//todo assertInjectorDownEvent("L015@5", 5, MS2US(30), 0); //todo assertInjectorDownEvent("L015@5", 5, MS2US(30), 0);
schedulingQueue.executeAll(timeNowUs + MS2US(10) + 1); engine->executor.executeAll(timeNowUs + MS2US(10) + 1);
// end of combined injection // end of combined injection
assertFalseM("injector@3", enginePins.injectors[0].currentLogicValue); assertFalseM("injector@3", enginePins.injectors[0].currentLogicValue);
timeNowUs += MS2US(20); timeNowUs += MS2US(20);
schedulingQueue.executeAll(timeNowUs); engine->executor.executeAll(timeNowUs);
assertEqualsM("Lqs#04", 0, engine->executor.size()); assertEqualsM("Lqs#04", 0, engine->executor.size());
setArrayValues(fuelMap.pointers[engineLoadIndex], FUEL_RPM_COUNT, 4); setArrayValues(fuelMap.pointers[engineLoadIndex], FUEL_RPM_COUNT, 4);
@ -1159,12 +1157,12 @@ void testFuelSchedulerBug299smallAndLarge(void) {
timeNowUs += MS2US(20); timeNowUs += MS2US(20);
schedulingQueue.executeAll(timeNowUs); // issue here engine->executor.executeAll(timeNowUs); // issue here
eth.firePrimaryTriggerFall(); eth.firePrimaryTriggerFall();
timeNowUs += MS2US(20); timeNowUs += MS2US(20);
schedulingQueue.executeAll(timeNowUs); engine->executor.executeAll(timeNowUs);
eth.firePrimaryTriggerRise(); eth.firePrimaryTriggerRise();
assertEqualsM("Lqs#5", 4, engine->executor.size()); assertEqualsM("Lqs#5", 4, engine->executor.size());
@ -1174,7 +1172,7 @@ void testFuelSchedulerBug299smallAndLarge(void) {
assertInjectorDownEvent("L05@3", 3, MS2US(20), 1 PASS_ENGINE_PARAMETER_SUFFIX); assertInjectorDownEvent("L05@3", 3, MS2US(20), 1 PASS_ENGINE_PARAMETER_SUFFIX);
timeNowUs += MS2US(20); timeNowUs += MS2US(20);
schedulingQueue.executeAll(timeNowUs); engine->executor.executeAll(timeNowUs);
} }
void testSparkReverseOrderBug319(void) { void testSparkReverseOrderBug319(void) {
@ -1209,7 +1207,7 @@ void testSparkReverseOrderBug319(void) {
eth.fireRise(20); eth.fireRise(20);
eth.fireFall(20); eth.fireFall(20);
schedulingQueue.executeAll(timeNowUs); engine->executor.executeAll(timeNowUs);
eth.fireRise(20); eth.fireRise(20);
eth.fireFall(20); eth.fireFall(20);
@ -1218,23 +1216,23 @@ void testSparkReverseOrderBug319(void) {
assertEqualsM("testSparkReverseOrderBug319: queue size", 7, engine->executor.size()); assertEqualsM("testSparkReverseOrderBug319: queue size", 7, engine->executor.size());
schedulingQueue.executeAll(timeNowUs); engine->executor.executeAll(timeNowUs);
printf("***************************************************\r\n"); printf("***************************************************\r\n");
eth.fireRise(20); eth.fireRise(20);
schedulingQueue.executeAll(timeNowUs); engine->executor.executeAll(timeNowUs);
timeNowUs += 100; // executing new signal too early timeNowUs += 100; // executing new signal too early
eth.firePrimaryTriggerFall(); eth.firePrimaryTriggerFall();
schedulingQueue.executeAll(timeNowUs); engine->executor.executeAll(timeNowUs);
assertEqualsM("out-of-order #1", 1, enginePins.coils[3].outOfOrder); assertEqualsM("out-of-order #1", 1, enginePins.coils[3].outOfOrder);
timeNowUs += MS2US(200); // moving time forward to execute all pending actions timeNowUs += MS2US(200); // moving time forward to execute all pending actions
schedulingQueue.executeAll(timeNowUs); engine->executor.executeAll(timeNowUs);
assertEqualsM("out-of-order #2", 0, enginePins.coils[3].outOfOrder); assertEqualsM("out-of-order #2", 0, enginePins.coils[3].outOfOrder);
@ -1242,7 +1240,7 @@ void testSparkReverseOrderBug319(void) {
eth.fireRise(20); eth.fireRise(20);
schedulingQueue.executeAll(timeNowUs); engine->executor.executeAll(timeNowUs);
assertEqualsM("RPM#2", 545, eth.engine.rpmCalculator.getRpm(PASS_ENGINE_PARAMETER_SIGNATURE)); assertEqualsM("RPM#2", 545, eth.engine.rpmCalculator.getRpm(PASS_ENGINE_PARAMETER_SIGNATURE));
@ -1250,13 +1248,13 @@ void testSparkReverseOrderBug319(void) {
eth.fireFall(20); eth.fireFall(20);
schedulingQueue.executeAll(timeNowUs); engine->executor.executeAll(timeNowUs);
assertEqualsM("out-of-order #4", 1, enginePins.coils[3].outOfOrder); assertEqualsM("out-of-order #4", 1, enginePins.coils[3].outOfOrder);
printf("*************************************************** (rpm is back) now let's have a good engine cycle and confirm things work\r\n"); printf("*************************************************** (rpm is back) now let's have a good engine cycle and confirm things work\r\n");
eth.fireRise(20); eth.fireRise(20);
schedulingQueue.executeAll(timeNowUs); engine->executor.executeAll(timeNowUs);
assertEqualsM("RPM#3", 3000, eth.engine.rpmCalculator.getRpm(PASS_ENGINE_PARAMETER_SIGNATURE)); assertEqualsM("RPM#3", 3000, eth.engine.rpmCalculator.getRpm(PASS_ENGINE_PARAMETER_SIGNATURE));
@ -1264,13 +1262,13 @@ void testSparkReverseOrderBug319(void) {
eth.fireFall(20); eth.fireFall(20);
schedulingQueue.executeAll(timeNowUs); engine->executor.executeAll(timeNowUs);
assertEqualsM("out-of-order #6 on c4", 1, enginePins.coils[3].outOfOrder); assertEqualsM("out-of-order #6 on c4", 1, enginePins.coils[3].outOfOrder);
printf("*************************************************** (rpm is back 2) now let's have a good engine cycle and confirm things work\r\n"); printf("*************************************************** (rpm is back 2) now let's have a good engine cycle and confirm things work\r\n");
eth.fireRise(20); eth.fireRise(20);
schedulingQueue.executeAll(timeNowUs); engine->executor.executeAll(timeNowUs);
assertEqualsM("RPM#4", 3000, eth.engine.rpmCalculator.getRpm(PASS_ENGINE_PARAMETER_SIGNATURE)); assertEqualsM("RPM#4", 3000, eth.engine.rpmCalculator.getRpm(PASS_ENGINE_PARAMETER_SIGNATURE));
@ -1278,7 +1276,7 @@ void testSparkReverseOrderBug319(void) {
eth.fireFall(20); eth.fireFall(20);
schedulingQueue.executeAll(timeNowUs); engine->executor.executeAll(timeNowUs);
assertEqualsM("out-of-order #8", 0, enginePins.coils[3].outOfOrder); assertEqualsM("out-of-order #8", 0, enginePins.coils[3].outOfOrder);
} }
@ -1297,31 +1295,31 @@ void testMissedSpark299(void) {
eth.fireRise(20); eth.fireRise(20);
schedulingQueue.executeAll(timeNowUs); engine->executor.executeAll(timeNowUs);
assertEqualsM("ci#0", 0, eth.engine.triggerCentral.triggerState.currentCycle.current_index); assertEqualsM("ci#0", 0, eth.engine.triggerCentral.triggerState.currentCycle.current_index);
eth.fireFall(20); eth.fireFall(20);
schedulingQueue.executeAll(timeNowUs); engine->executor.executeAll(timeNowUs);
assertEqualsM("ci#1", 1, eth.engine.triggerCentral.triggerState.currentCycle.current_index); assertEqualsM("ci#1", 1, eth.engine.triggerCentral.triggerState.currentCycle.current_index);
eth.fireRise(20); eth.fireRise(20);
schedulingQueue.executeAll(timeNowUs); engine->executor.executeAll(timeNowUs);
assertEqualsM("ci#2", 0, eth.engine.triggerCentral.triggerState.currentCycle.current_index); assertEqualsM("ci#2", 0, eth.engine.triggerCentral.triggerState.currentCycle.current_index);
eth.fireFall(20); eth.fireFall(20);
schedulingQueue.executeAll(timeNowUs); engine->executor.executeAll(timeNowUs);
assertEqualsM("ci#3", 1, eth.engine.triggerCentral.triggerState.currentCycle.current_index); assertEqualsM("ci#3", 1, eth.engine.triggerCentral.triggerState.currentCycle.current_index);
eth.fireRise(20); eth.fireRise(20);
schedulingQueue.executeAll(timeNowUs); engine->executor.executeAll(timeNowUs);
eth.fireFall(20); eth.fireFall(20);
schedulingQueue.executeAll(timeNowUs); engine->executor.executeAll(timeNowUs);
assertEqualsM("ci#5", 1, eth.engine.triggerCentral.triggerState.currentCycle.current_index); assertEqualsM("ci#5", 1, eth.engine.triggerCentral.triggerState.currentCycle.current_index);
@ -1335,33 +1333,33 @@ void testMissedSpark299(void) {
eth.fireRise(20); eth.fireRise(20);
schedulingQueue.executeAll(timeNowUs); engine->executor.executeAll(timeNowUs);
eth.fireFall(20); eth.fireFall(20);
schedulingQueue.executeAll(timeNowUs); engine->executor.executeAll(timeNowUs);
eth.fireRise(20); eth.fireRise(20);
schedulingQueue.executeAll(timeNowUs); engine->executor.executeAll(timeNowUs);
eth.fireFall(20); eth.fireFall(20);
schedulingQueue.executeAll(timeNowUs); engine->executor.executeAll(timeNowUs);
setWholeTimingTable(-5 PASS_ENGINE_PARAMETER_SUFFIX); setWholeTimingTable(-5 PASS_ENGINE_PARAMETER_SUFFIX);
eth.engine.periodicFastCallback(PASS_ENGINE_PARAMETER_SIGNATURE); eth.engine.periodicFastCallback(PASS_ENGINE_PARAMETER_SIGNATURE);
eth.fireRise(20); eth.fireRise(20);
schedulingQueue.executeAll(timeNowUs); engine->executor.executeAll(timeNowUs);
eth.fireFall(20); eth.fireFall(20);
schedulingQueue.executeAll(timeNowUs); engine->executor.executeAll(timeNowUs);
eth.fireRise(20); eth.fireRise(20);
schedulingQueue.executeAll(timeNowUs); engine->executor.executeAll(timeNowUs);
eth.fireFall(20); eth.fireFall(20);
schedulingQueue.executeAll(timeNowUs); engine->executor.executeAll(timeNowUs);
assertEqualsM("warningCounter#1", 5, unitTestWarningCounter); assertEqualsM("warningCounter#1", 5, unitTestWarningCounter);
} }

View File

@ -28,8 +28,6 @@ extern int unitTestWarningCounter;
extern bool printTriggerDebug; extern bool printTriggerDebug;
extern float actualSynchGap; extern float actualSynchGap;
extern EventQueue schedulingQueue;
static void fireEvent(EngineTestHelper *eth, bool isRise) { static void fireEvent(EngineTestHelper *eth, bool isRise) {
// mostly we fire only rise events (useOnlyRisingEdgeForTrigger=true). // mostly we fire only rise events (useOnlyRisingEdgeForTrigger=true).
// but for noise filtering, both edges should be processed, so we fire falling events too // but for noise filtering, both edges should be processed, so we fire falling events too