Опрос датчика раз в 100 мс на деле идёт с периодом 115–130 мс
for (;;) {
sample_and_filter(); /* 15–30 мс */
vTaskDelay(pdMS_TO_TICKS(100));
}
Цифровой фильтр рассчитан на частоту дискретизации ровно 10 Гц, но период «гуляет» и в среднем больше 100 мс. Как получить стабильный период?
- Использовать xTaskDelayUntil от прошлого пробуждения
- Уменьшить задержку до 80 мс, чтобы компенсировать
- Поднять приоритет задачи до максимального
- Вызывать taskYIELD() вместо vTaskDelay
