Speeduino
Loading...
Searching...
No Matches
Macros | Functions | Variables
speeduino.ino File Reference
#include <stdint.h>
#include "globals.h"
#include "scheduler.h"
#include "comms.h"
#include "comms_legacy.h"
#include "comms_secondary.h"
#include "maths.h"
#include "corrections.h"
#include "timers.h"
#include "decoders.h"
#include "idle.h"
#include "auxiliaries.h"
#include "sensors.h"
#include "storage.h"
#include "crankMaths.h"
#include "init.h"
#include "programmableIOControl.h"
#include "engineProtection.h"
#include "secondaryTables.h"
#include "comms_CAN.h"
#include "SD_logger.h"
#include "load_source.h"
#include "board_definition.h"
#include "unit_testing.h"
#include <RTC_LIB_H>
#include "units.h"
#include "fuel_calcs.h"
#include "preprocessor.h"
#include "dwell.h"
#include "decoder_init.h"
#include "src/pins/pinMapping.h"
#include "resetControl.h"
#include "scheduler_ignition_controller.h"
#include "src/controllers/launch/launchController.h"
#include "src/controllers/fuelPump/fuelPumpController.h"
#include "scheduler_fuel_controller.h"

Macros

#define CRANK_RUN_HYSTER   15
 

Functions

void setup (void)
 
static uint8_t getVE1 (void)
 
static int8_t getAdvance1 (void)
 
static bool haveSwitchedToBatteryPower (uint8_t originalBatteryVoltage, const statuses &current)
 
static void onPowerSourceSwitch (uint8_t originalBatteryVoltage, const statuses &current, const config2 &page2, const config6 &page6)
 
 BEGIN_LTO_ALWAYS_INLINE (void) loop(void)
 

Variables

constexpr table2D_u8_u8_10 idleTargetTableconfigPage6
 

Detailed Description

Speeduino initialisation and main loop.

Macro Definition Documentation

◆ CRANK_RUN_HYSTER

#define CRANK_RUN_HYSTER   15

Function Documentation

◆ BEGIN_LTO_ALWAYS_INLINE()

BEGIN_LTO_ALWAYS_INLINE ( void  )

Speeduino main loop.

Main loop chores (roughly in the order that they are performed):

  • Check if serial comms or tooth logging are in progress (send or receive, prioritise communication)
  • Record loop timing vars
  • Check tooth time, update statuses (currentStatus) variables
  • Read sensors
  • get VE for fuel calcs and spark advance for ignition
  • Check crank/cam/tooth/timing sync (skip remaining ops if out-of-sync)
  • execute doCrankSpeedCalcs()

single byte variable currentStatus.LOOP_TIMER plays a big part here as:

  • it contains expire-bits for interval based frequency driven events (e.g. 15Hz, 4Hz, 1Hz)
  • Can be tested for certain frequency interval being expired by (eg) BIT_CHECK(currentStatus.LOOP_TIMER, BIT_TIMER_15HZ)

Sometimes loop() is inlined by LTO & sometimes not When not inlined, there is a huge difference in stack usage: 60+ bytes That eats into available RAM. Adding attribute((always_inline)) forces the LTO process to inline.

Since the function is declared in an Arduino header, we can't change it to inline, so we need to suppress the resulting warning.

Here is the call graph for this function:

◆ getAdvance1()

static int8_t getAdvance1 ( void  )
inlinestatic

Lookup the ignition advance from 3D ignition table. The values used to look this up will be RPM and whatever load source the user has configured.

Returns
byte The current target advance value in degrees
Here is the call graph for this function:
Here is the caller graph for this function:

◆ getVE1()

static uint8_t getVE1 ( void  )
inlinestatic

Lookup the current VE value from the primary 3D fuel map. The Y axis value used for this lookup varies based on the fuel algorithm selected (speed density, alpha-n etc).

Returns
byte The current VE value
Here is the call graph for this function:
Here is the caller graph for this function:

◆ haveSwitchedToBatteryPower()

static bool haveSwitchedToBatteryPower ( uint8_t  originalBatteryVoltage,
const statuses current 
)
inlinestatic
Here is the call graph for this function:
Here is the caller graph for this function:

◆ onPowerSourceSwitch()

static void onPowerSourceSwitch ( uint8_t  originalBatteryVoltage,
const statuses current,
const config2 page2,
const config6 page6 
)
static
Here is the call graph for this function:
Here is the caller graph for this function:

◆ setup()

void setup ( void  )
Here is the call graph for this function:

Variable Documentation

◆ configPage6

constexpr table2D_u8_u8_10 idleTargetTable& configPage6
constexpr