добавление в bench_time измерения периода
улучшение фильтров (эксп и авераге)
This commit is contained in:
@@ -182,6 +182,61 @@ static inline uint32_t BenchTime_End(uint8_t channel, uint32_t ticks) {
|
||||
return elapsed_ticks;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief Измерение периода на указанном канале
|
||||
* @param channel Номер канала (0..BENCH_TIME_MAX_CHANNELS-1)
|
||||
* @param ticks Источник тиков (например: HAL_GetTick(), TIM2->CNT, DWT->CYCCNT)
|
||||
* @param tick_period Период тиков для переполнения
|
||||
* @return Измеренное время в тиках, 0 - в случае первого запуска или ошибки
|
||||
*/
|
||||
static inline uint32_t BenchTime_Period(uint8_t channel, uint32_t ticks, uint32_t tick_period) {
|
||||
if (channel >= BENCH_TIME_MAX_CHANNELS) return 0;
|
||||
if (!hbt.channels[channel].is_running)
|
||||
{
|
||||
hbt.channels[channel].start_tick = ticks;
|
||||
hbt.channels[channel].tick_period = tick_period;
|
||||
hbt.channels[channel].is_running = 1;
|
||||
return 0;
|
||||
};
|
||||
|
||||
uint32_t end_tick = ticks;
|
||||
uint32_t start_tick = hbt.channels[channel].start_tick;
|
||||
uint32_t elapsed_ticks;
|
||||
|
||||
// Инит для следующего измерения
|
||||
hbt.channels[channel].start_tick = end_tick;
|
||||
hbt.channels[channel].tick_period = tick_period;
|
||||
|
||||
if (end_tick >= start_tick) {
|
||||
elapsed_ticks = end_tick - start_tick;
|
||||
} else {
|
||||
elapsed_ticks = (tick_period - start_tick) + end_tick + 1;
|
||||
}
|
||||
|
||||
if (elapsed_ticks > tick_period) {
|
||||
elapsed_ticks = tick_period;
|
||||
}
|
||||
|
||||
// Обновление статистики
|
||||
BenchTimeStats_t* stats = &hbt.channels[channel].stats;
|
||||
stats->last_ticks = elapsed_ticks;
|
||||
|
||||
if (elapsed_ticks < stats->min_ticks) {
|
||||
stats->min_ticks = elapsed_ticks;
|
||||
}
|
||||
|
||||
if (elapsed_ticks > stats->max_ticks) {
|
||||
stats->max_ticks = elapsed_ticks;
|
||||
}
|
||||
|
||||
stats->total_ticks += elapsed_ticks;
|
||||
stats->count++;
|
||||
|
||||
return elapsed_ticks;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief Получение минимального времени измерения
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user