65#ifndef __BENCH_TIME_H_
66#define __BENCH_TIME_H_
71#ifdef BENCH_TIME_ENABLE
74#ifndef BENCH_TIME_MAX_CHANNELS
75#define BENCH_TIME_MAX_CHANNELS 8
113 hbt.channels[i].start_tick = 0;
114 hbt.channels[i].tick_period = 0xFFFFFFFF;
115 hbt.channels[i].is_running = 0;
116 hbt.channels[i].stats.min_ticks = 0xFFFFFFFF;
117 hbt.channels[i].stats.max_ticks = 0;
118 hbt.channels[i].stats.total_ticks = 0;
119 hbt.channels[i].stats.count = 0;
120 hbt.channels[i].stats.last_ticks = 0;
131static inline uint32_t
BenchTime_Start(uint8_t channel, uint32_t ticks, uint32_t tick_period) {
133 if (
hbt.channels[channel].is_running)
return 0;
135 hbt.channels[channel].start_tick = ticks;
136 hbt.channels[channel].tick_period = tick_period;
137 hbt.channels[channel].is_running = 1;
149 if (!
hbt.channels[channel].is_running)
return 0;
151 uint32_t end_tick = ticks;
152 uint32_t start_tick =
hbt.channels[channel].start_tick;
153 uint32_t tick_period =
hbt.channels[channel].tick_period;
154 uint32_t elapsed_ticks;
156 if (end_tick >= start_tick) {
157 elapsed_ticks = end_tick - start_tick;
159 elapsed_ticks = (tick_period - start_tick) + end_tick + 1;
162 if (elapsed_ticks > tick_period) {
163 elapsed_ticks = tick_period;
166 hbt.channels[channel].is_running = 0;
172 if (elapsed_ticks < stats->min_ticks) {
183 return elapsed_ticks;
191 return hbt.channels[channel].stats.min_ticks;
199 return hbt.channels[channel].stats.max_ticks;
208 if (stats->
count == 0)
return 0;
217 return hbt.channels[channel].stats.count;
225 return hbt.channels[channel].stats.last_ticks;
242#define BenchTime_Init()
243#define BenchTime_Start(channel, ticks, tick_period) 0
244#define BenchTime_End(channel, ticks) 0
245#define BenchTime_GetMin(channel) 0
246#define BenchTime_GetMax(channel) 0
247#define BenchTime_GetAverage(channel) 0
248#define BenchTime_GetCount(channel) 0
249#define BenchTime_GetLast(channel) 0
250#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[16]
Каналы измерения
Структура канала измерения
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
Количество измерений