rusEFI
The most advanced open source ECU
Loading...
Searching...
No Matches
controllers
core
main_loop.cpp
Go to the documentation of this file.
1
//
2
// Created by FDSoftware on 21/04/25.
3
//
4
5
#include "
pch.h
"
6
#include "
thread_priority.h
"
7
#include "
main_loop.h
"
8
#include "
main_loop_controller.h
"
9
10
MainLoop::MainLoop
()
11
:
PeriodicController
(
"MainLoop"
, PRIO_MAIN_LOOP, MAIN_LOOP_RATE)
12
{
13
}
14
15
template
<LoopPeriod TFlag>
16
LoopPeriod
MainLoop::makePeriodFlag
()
const
{
17
if
(
m_cycleCounter
% loopCounts<TFlag>() == 0) {
18
return
TFlag;
19
}
else
{
20
return
LoopPeriod::None
;
21
}
22
}
23
24
LoopPeriod
MainLoop::makePeriodFlags
() {
25
if
(
m_cycleCounter
>= MAIN_LOOP_RATE) {
26
m_cycleCounter
= 0;
27
}
28
29
LoopPeriod
lp =
LoopPeriod::None
;
30
lp |= makePeriodFlag<LoopPeriod::Period1000hz>();
31
lp |= makePeriodFlag<LoopPeriod::Period500hz>();
32
lp |= makePeriodFlag<LoopPeriod::Period250hz>();
33
lp |= makePeriodFlag<LoopPeriod::Period200hz>();
34
lp |= makePeriodFlag<LoopPeriod::Period20hz>();
35
36
m_cycleCounter
++;
37
38
return
lp;
39
}
40
41
void
MainLoop::PeriodicTask
(efitick_t nowNt) {
42
ScopePerf
perf(
PE::MainLoop
);
43
44
LoopPeriod
currentLoopPeriod =
makePeriodFlags
();
45
46
#if HAL_USE_ADC
47
if
(currentLoopPeriod & ADC_UPDATE_RATE) {
48
adcInputsUpdateSubscribers
(nowNt);
49
}
50
#endif
// HAL_USE_ADC
51
52
#if EFI_ELECTRONIC_THROTTLE_BODY
53
if
(currentLoopPeriod & ETB_UPDATE_RATE) {
54
// TODO: main_loop etb callback
55
}
56
#endif
// EFI_ELECTRONIC_THROTTLE_BODY
57
58
if
(currentLoopPeriod & SLOW_CALLBACK_RATE) {
59
//TODO: main_loop slow callback
60
}
61
62
if
(currentLoopPeriod & FAST_CALLBACK_RATE) {
63
//TODO: main_loop fast callback
64
}
65
}
66
67
void
initMainLoop
() {
68
// see test_periodic_thread_controller.cpp for explanation
69
#if ! EFI_UNIT_TEST
70
mainLoop.start();
71
#endif
72
}
adcInputsUpdateSubscribers
void adcInputsUpdateSubscribers(efitick_t nowNt)
Definition
adc_inputs.cpp:181
MainLoop::makePeriodFlag
LoopPeriod makePeriodFlag() const
Definition
main_loop.cpp:16
MainLoop::m_cycleCounter
int m_cycleCounter
Definition
main_loop_controller.h:35
MainLoop::makePeriodFlags
LoopPeriod makePeriodFlags()
Definition
main_loop.cpp:24
MainLoop::MainLoop
MainLoop()
Definition
main_loop.cpp:10
MainLoop::PeriodicTask
void PeriodicTask(efitick_t nowNt) override
Called periodically. Override this method to do work for your controller.
Definition
main_loop.cpp:41
PeriodicController
Base class for a controller that needs to run periodically to perform work.
Definition
periodic_thread_controller.h:37
ScopePerf
Definition
perf_trace.h:109
initMainLoop
void initMainLoop()
Definition
main_loop.cpp:67
main_loop.h
LoopPeriod
LoopPeriod
Definition
main_loop.h:7
LoopPeriod::None
@ None
main_loop_controller.h
pch.h
PE::MainLoop
@ MainLoop
thread_priority.h
This file sets the thread priority for the threads running on rusEFI.
Generated on Sat Sep 27 2025 00:10:04 for rusEFI by
1.9.8