The Big Refactoring of 2019: folder structure #723

This commit is contained in:
rusefi 2019-03-31 17:14:53 -04:00
parent ebe58122c6
commit 372eb51f37
8 changed files with 80 additions and 54 deletions

View File

@ -58,6 +58,7 @@
#include "settings.h"
#include "aux_pid.h"
#include "accelerometer.h"
#include "counter64.h"
#if HAL_USE_ADC || defined(__DOXYGEN__)
#include "AdcConfiguration.h"

View File

@ -0,0 +1,42 @@
/*
* counter64.cpp
*
* Created on: Mar 31, 2019
* @author Andrey Belomutskiy, (c) 2012-2019
*/
#include "counter64.h"
/**
* The main use-case of this class is to keep track of a 64-bit global number of CPU ticks from reset.
*
* stm32f4 hardware has a 32-bit Cycle Count Register (CYCCNT), which is incremented with every CPU cycle.
* With 32 bits and 168MHz speed this counter overflows every 4B/168M = 23 seconds. The job of this class is to
* keep track of the current CYCCNT value, detect these overflows, and provide a nice,
* clean 64 bit global cycle counter.
*
* In order for this to function, it's your responsibility to invoke offer() method at least once a second.
*/
Overflow64Counter::Overflow64Counter() {
state.highBits = 0;
state.lowBits = 0;
}
/**
* in order to have atomic writes this should be invoked within a critical section
*/
void updateAndSet(State64 *state, uint32_t value) {
if (value < state->lowBits) {
// new value less than previous value means there was an overflow in that 32 bit counter
state->highBits += 0x100000000LL;
}
state->lowBits = value;
}
#if EFI_UNIT_TEST
efitime_t Overflow64Counter::update(uint32_t value) {
updateAndSet(&state, value);
return state.highBits + state.lowBits;
}
#endif

View File

@ -0,0 +1,34 @@
/*
* counter64.h
*
* Created on: Mar 31, 2019
* @author Andrey Belomutskiy, (c) 2012-2019
*/
#ifndef UTIL_CONTAINERS_COUNTER64_H_
#define UTIL_CONTAINERS_COUNTER64_H_
#include "global.h"
typedef struct {
// todo: would probably be better to keep the high bits as 32 bit field to be sure
volatile efitime_t highBits;
volatile uint32_t lowBits;
} State64;
void updateAndSet(State64 *state, uint32_t value);
class Overflow64Counter
{
public:
Overflow64Counter();
efitime_t get();
#if EFI_UNIT_TEST
efitime_t update(uint32_t value);
#endif
State64 state;
};
#endif /* UTIL_CONTAINERS_COUNTER64_H_ */

View File

@ -2,7 +2,7 @@
* data_buffer.h
*
* @date Dec 8, 2012
* @author Andrey Belomutskiy, (c) 2012-2017
* @author Andrey Belomutskiy, (c) 2012-2019
*/
#ifndef DATA_BUFFER_H_

View File

@ -7,39 +7,6 @@
#include "efilib2.h"
/**
* The main use-case of this class is to keep track of a 64-bit global number of CPU ticks from reset.
*
* stm32f4 hardware has a 32-bit Cycle Count Register (CYCCNT), which is incremented with every CPU cycle.
* With 32 bits and 168MHz speed this counter overflows every 4B/168M = 23 seconds. The job of this class is to
* keep track of the current CYCCNT value, detect these overflows, and provide a nice,
* clean 64 bit global cycle counter.
*
* In order for this to function, it's your responsibility to invoke offer() method at least once a second.
*/
Overflow64Counter::Overflow64Counter() {
state.highBits = 0;
state.lowBits = 0;
}
/**
* in order to have atomic writes this should be invoked within a critical section
*/
void updateAndSet(State64 *state, uint32_t value) {
if (value < state->lowBits) {
// new value less than previous value means there was an overflow in that 32 bit counter
state->highBits += 0x100000000LL;
}
state->lowBits = value;
}
#if EFI_UNIT_TEST
efitime_t Overflow64Counter::update(uint32_t value) {
updateAndSet(&state, value);
return state.highBits + state.lowBits;
}
#endif
/**
* See also getRemainingStack()
*/

View File

@ -10,31 +10,11 @@
#include "global.h"
typedef struct {
// todo: would probably be better to keep the high bits as 32 bit field to be sure
volatile efitime_t highBits;
volatile uint32_t lowBits;
} State64;
void updateAndSet(State64 *state, uint32_t value);
/**
* @return for a given stack memory region returns how much stack was ever used
*/
int getMaxUsedStack(uint8_t *ptr, int size);
class Overflow64Counter
{
public:
Overflow64Counter();
efitime_t get();
#if EFI_UNIT_TEST
efitime_t update(uint32_t value);
#endif
State64 state;
};
#if (EFI_PROD_CODE || EFI_SIMULATOR)
#define GET_TIMESTAMP() port_rt_get_counter_value()
#else

View File

@ -9,6 +9,7 @@ UTILSRC_CPP = $(UTIL_DIR)/containers/cyclic_buffer.cpp \
$(PROJECT_DIR)/util/datalogging.cpp \
$(PROJECT_DIR)/util/loggingcentral.cpp \
$(UTIL_DIR)/containers/listener_array.cpp \
$(UTIL_DIR)/containers/counter64.cpp \
$(PROJECT_DIR)/util/cli_registry.cpp \
$(PROJECT_DIR)/util/pid.cpp \
$(PROJECT_DIR)/util/biquad.cpp \

View File

@ -22,6 +22,7 @@
#include "crc.h"
#include "fl_stack.h"
#include "io_pins.h"
#include "counter64.h"
#include "efi_gpio.h"
#include "efilib.h"