GCC Code Coverage Report


Directory: ./
File: firmware/controllers/core/main_loop.cpp
Date: 2025-10-03 00:57:22
Coverage Exec Excl Total
Lines: 76.7% 33 0 43
Functions: 77.8% 7 0 9
Branches: 88.9% 16 0 18
Decisions: 100.0% 2 - 2

Line Branch Decision Exec Source
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 2 MainLoop::MainLoop()
11 2 : PeriodicController("MainLoop", PRIO_MAIN_LOOP, MAIN_LOOP_RATE)
12 {
13 2 }
14
15 template <LoopPeriod TFlag>
16 29 LoopPeriod MainLoop::makePeriodFlag() const {
17
9/10
LoopPeriod MainLoop::makePeriodFlag<(LoopPeriod)16>() const:
✓ Branch 1 taken 3 times.
✓ Branch 2 taken 2 times.
LoopPeriod MainLoop::makePeriodFlag<(LoopPeriod)8>() const:
✓ Branch 1 taken 5 times.
✓ Branch 2 taken 2 times.
LoopPeriod MainLoop::makePeriodFlag<(LoopPeriod)4>() const:
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 time.
LoopPeriod MainLoop::makePeriodFlag<(LoopPeriod)2>() const:
✓ Branch 1 taken 5 times.
✓ Branch 2 taken 2 times.
LoopPeriod MainLoop::makePeriodFlag<(LoopPeriod)1>() const:
✓ Branch 1 taken 5 times.
✗ Branch 2 not taken.
29 if (m_cycleCounter % loopCounts<TFlag>() == 0) {
18 22 return TFlag;
19 } else {
20 7 return LoopPeriod::None;
21 }
22 }
23
24 5 LoopPeriod MainLoop::makePeriodFlags() {
25
2/2
✓ Branch 0 taken 1 time.
✓ Branch 1 taken 4 times.
2/2
✓ Decision 'true' taken 1 time.
✓ Decision 'false' taken 4 times.
5 if (m_cycleCounter >= MAIN_LOOP_RATE) {
26 1 m_cycleCounter = 0;
27 }
28
29 5 LoopPeriod lp = LoopPeriod::None;
30
1/1
✓ Branch 2 taken 5 times.
5 lp |= makePeriodFlag<LoopPeriod::Period1000hz>();
31
1/1
✓ Branch 2 taken 5 times.
5 lp |= makePeriodFlag<LoopPeriod::Period500hz>();
32
1/1
✓ Branch 2 taken 5 times.
5 lp |= makePeriodFlag<LoopPeriod::Period250hz>();
33
1/1
✓ Branch 2 taken 5 times.
5 lp |= makePeriodFlag<LoopPeriod::Period200hz>();
34
1/1
✓ Branch 2 taken 5 times.
5 lp |= makePeriodFlag<LoopPeriod::Period20hz>();
35
36 5 m_cycleCounter++;
37
38 5 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 }
73