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
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;
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;
171 if (elapsed_ticks < stats->min_ticks) {
182 return elapsed_ticks;
190 return hbt.channels[channel].stats.min_ticks;
198 return hbt.channels[channel].stats.max_ticks;
207 if (stats->
count == 0)
return 0;
216 return hbt.channels[channel].stats.count;
224 return hbt.channels[channel].stats.last_ticks;
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)
static uint32_t BenchTime_GetMax(uint8_t channel)
Получение максимального времени измерения
static uint32_t BenchTime_GetAverage(uint8_t channel)
Получение среднего времени измерения
static uint32_t BenchTime_GetMin(uint8_t channel)
Получение минимального времени измерения
static void BenchTime_ResetStats(uint8_t channel)
Сброс статистики для канала
static uint32_t BenchTime_End(uint8_t channel, uint32_t ticks)
Окончание измерения на указанном канале
static BenchTime_t hbt
Внутренний экземпляр
static void BenchTime_Init(void)
Инициализация системы измерения времени
static uint32_t BenchTime_GetCount(uint8_t channel)
Получение количества измерений
static uint32_t BenchTime_Start(uint8_t channel, uint32_t ticks, uint32_t tick_period)
Начало измерения на указанном канале
static uint32_t BenchTime_GetLast(uint8_t channel)
Получение последнего измеренного времени
#define BENCH_TIME_MAX_CHANNELS
Максимальное количество каналов измерения
Заголочный файл для дефайнов библиотеки MyLibsGeneral.
Основная структура менеджера измерений
BenchTimeChannel_t channels[BENCH_TIME_MAX_CHANNELS]
Каналы измерения
Структура канала измерения
uint32_t tick_period
Период тиков для переполнения
uint32_t is_running
Флаг активного измерения
BenchTimeStats_t stats
Статистика измерений
uint32_t start_tick
Время старта в тиках
Структура статистики измерений
uint32_t total_ticks
Суммарное время в тиках
uint32_t last_ticks
Последнее измеренное время
uint32_t min_ticks
Минимальное время в тиках
uint32_t max_ticks
Максимальное время в тиках
uint32_t count
Количество измерений