64#ifndef __BENCH_TIME_H_
65#define __BENCH_TIME_H_
70#ifdef BENCH_TIME_ENABLE
73#ifndef BENCH_TIME_MAX_CHANNELS
74#define BENCH_TIME_MAX_CHANNELS 8
95 BenchTimeStats_t stats;
105static BenchTime_t hbt = {0};
110static inline void BenchTime_Init(
void) {
112 hbt.channels[i].start_tick = 0;
113 hbt.channels[i].tick_period = 0xFFFFFFFF;
114 hbt.channels[i].is_running = 0;
115 hbt.channels[i].stats.min_ticks = 0xFFFFFFFF;
116 hbt.channels[i].stats.max_ticks = 0;
117 hbt.channels[i].stats.total_ticks = 0;
118 hbt.channels[i].stats.count = 0;
119 hbt.channels[i].stats.last_ticks = 0;
130static inline uint32_t BenchTime_Start(uint8_t channel, uint32_t ticks, uint32_t tick_period) {
132 if (hbt.channels[channel].is_running)
return 0;
134 hbt.channels[channel].start_tick = ticks;
135 hbt.channels[channel].tick_period = tick_period;
136 hbt.channels[channel].is_running = 1;
146static inline uint32_t BenchTime_End(uint8_t channel, uint32_t ticks) {
148 if (!hbt.channels[channel].is_running)
return 0;
150 uint32_t end_tick = ticks;
151 uint32_t start_tick = hbt.channels[channel].start_tick;
152 uint32_t tick_period = hbt.channels[channel].tick_period;
153 uint32_t elapsed_ticks;
155 if (end_tick >= start_tick) {
156 elapsed_ticks = end_tick - start_tick;
158 elapsed_ticks = (tick_period - start_tick) + end_tick + 1;
161 if (elapsed_ticks > tick_period) {
162 elapsed_ticks = tick_period;
165 hbt.channels[channel].is_running = 0;
168 BenchTimeStats_t* stats = &hbt.channels[channel].stats;
169 stats->last_ticks = elapsed_ticks;
171 if (elapsed_ticks < stats->min_ticks) {
172 stats->min_ticks = elapsed_ticks;
175 if (elapsed_ticks > stats->max_ticks) {
176 stats->max_ticks = elapsed_ticks;
179 stats->total_ticks += elapsed_ticks;
182 return elapsed_ticks;
188static inline uint32_t BenchTime_GetMin(uint8_t channel) {
190 return hbt.channels[channel].stats.min_ticks;
196static inline uint32_t BenchTime_GetMax(uint8_t channel) {
198 return hbt.channels[channel].stats.max_ticks;
204static inline uint32_t BenchTime_GetAverage(uint8_t channel) {
206 BenchTimeStats_t* stats = &hbt.channels[channel].stats;
207 if (stats->count == 0)
return 0;
208 return stats->total_ticks / stats->count;
214static inline uint32_t BenchTime_GetCount(uint8_t channel) {
216 return hbt.channels[channel].stats.count;
222static inline uint32_t BenchTime_GetLast(uint8_t channel) {
224 return hbt.channels[channel].stats.last_ticks;
230static inline void BenchTime_ResetStats(uint8_t channel) {
232 BenchTimeStats_t* stats = &hbt.channels[channel].stats;
233 stats->min_ticks = 0xFFFFFFFF;
234 stats->max_ticks = 0;
235 stats->total_ticks = 0;
237 stats->last_ticks = 0;
241#define BenchTime_Init()
242#define BenchTime_Start(channel, ticks, tick_period) 0
243#define BenchTime_End(channel, ticks) 0
244#define BenchTime_GetMin(channel) 0
245#define BenchTime_GetMax(channel) 0
246#define BenchTime_GetAverage(channel) 0
247#define BenchTime_GetCount(channel) 0
248#define BenchTime_GetLast(channel) 0
249#define BenchTime_ResetStats(channel)
#define BENCH_TIME_MAX_CHANNELS
Максимальное количество каналов измерения
Заголочный файл для дефайнов библиотеки MyLibsGeneral.