25 #define TEST_CALLBACK_DELAY_MS 10
28 #define TIMER_PRECISION_THRESHOLD 0.2
51 criticalAssertVoid(
hwStarted,
"HW.started");
54 auto timeDeltaNt = setTimeNt - nowNt;
62 if (timeDeltaNt <= 0) {
68 if (timeDeltaNt < US2NT(2)) {
69 timeDeltaNt = US2NT(2);
72 if (timeDeltaNt >= TOO_FAR_INTO_FUTURE_NT) {
79 if (hasFirmwareError()) {
113 const char* msg =
isTimerPending ?
"No_cb too long" :
"Timer not awhile";
143 if (absI(actualTimeSinceSchedulingMs - TEST_CALLBACK_DELAY_MS) > TEST_CALLBACK_DELAY_MS * TIMER_PRECISION_THRESHOLD) {
153 if (hasFirmwareError()) {
161 chThdSleepMilliseconds(TEST_CALLBACK_DELAY_MS + 2);
177 #if EFI_EMULATE_POSITION_SENSORS
SingleTimerExecutor executor
virtual int getPeriodMs()=0
virtual void PeriodicTask()=0
void scheduleForLater(const char *msg, scheduling_s *scheduling, int delayUs, action_s action) override
bool warning(ObdCode code, const char *fmt,...)
void firmwareError(ObdCode code, const char *fmt,...)
void globalTimerCallback()
static bool isTimerPending
static scheduling_s watchDogBuddy
static void timerValidationCallback(void *)
static int timerFreezeCounter
void setHardwareSchedulerTimer(efitick_t nowNt, efitick_t setTimeNt)
static void watchDogBuddyCallback(void *)
static int timerRestartCounter
static MicrosecondTimerWatchdogController watchdogControllerInstance
static void validateHardwareTimer()
uint32_t maxPrecisionCallbackDuration
static Timer testScheduling
void portMicrosecondTimerCallback()
static int setHwTimerCounter
static efitick_t lastSetTimerTimeNt
static volatile bool testSchedulingHappened
static int timerCallbackCounter
void initMicrosecondTimer()
uint32_t getTimeNowLowerNt()
void portSetHardwareSchedulerTimer(efitick_t nowNt, efitick_t setTimeNt)
void portInitMicrosecondTimer()
@ CUSTOM_ERR_TIMER_OVERFLOW
@ CUSTOM_ERR_TIMER_TEST_CALLBACK_NOT_HAPPENED
@ CUSTOM_ERR_SCHEDULING_ERROR
@ CUSTOM_OBD_LOCAL_FREEZE
@ CUSTOM_ERR_TIMER_TEST_CALLBACK_WRONG_TIME