MCPcopy Create free account
hub / github.com/FastLED/FastLED / computeLowMemPeriodStats

Function computeLowMemPeriodStats

examples/AutoResearch/AutoResearchLowMemory.h:84–115  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

82};
83
84inline LowMemPinTogglePeriodStats computeLowMemPeriodStats(
85 const fl::EdgeTime* edges, fl::size edge_count) FL_NOEXCEPT {
86 LowMemPinTogglePeriodStats s{0, 0, 0, 0, 0};
87 fl::u64 sum = 0;
88 fl::u64 sum_sq = 0;
89 fl::u32 min_ns = 0xFFFFFFFFu;
90 fl::u32 max_ns = 0;
91 fl::u32 count = 0;
92 for (fl::size i = 0; i + 1 < edge_count; i += 2) {
93 const fl::u32 period_ns =
94 static_cast<fl::u32>(edges[i].ns) +
95 static_cast<fl::u32>(edges[i + 1].ns);
96 if (period_ns == 0) continue;
97 sum += period_ns;
98 sum_sq += static_cast<fl::u64>(period_ns) * static_cast<fl::u64>(period_ns);
99 if (period_ns < min_ns) min_ns = period_ns;
100 if (period_ns > max_ns) max_ns = period_ns;
101 ++count;
102 }
103 if (count == 0) return s;
104 const fl::u32 mean = static_cast<fl::u32>(sum / static_cast<fl::u64>(count));
105 const fl::u64 mean64 = static_cast<fl::u64>(mean);
106 const fl::u64 var = (sum_sq / static_cast<fl::u64>(count)) - (mean64 * mean64);
107 fl::u32 sig = 0;
108 while (static_cast<fl::u64>(sig + 1) * static_cast<fl::u64>(sig + 1) <= var) ++sig;
109 s.periods = count;
110 s.mean_ns = mean;
111 s.sigma_ns = sig;
112 s.min_ns = (min_ns == 0xFFFFFFFFu) ? 0u : min_ns;
113 s.max_ns = max_ns;
114 return s;
115}
116#endif // FL_IS_ARM_LPC
117
118} // namespace

Callers 1

Calls

no outgoing calls

Tested by

no test coverage detected