
#️⃣1️⃣** Jitter
Джиттер во времени выполнения функций в embedded-системах - это нестабильность временных интервалов между событиями, которая может приводить к задержкам, ошибкам синхронизации и снижению надежности.
Пример джиттера изображëн на схеме. Здесь объём работы должен быть выполнен в течение каждых 10 мс. Хотя все сроки соблюдены, существует значительный разброс во времени между запусками задачи. Для систем, требующих более точного начала или завершения работы в пределах 10 мс, это недопустимо.
В работе, связанной со считыванием физического входного сигнала (*данных с аналого-цифрового преобразователя), точный период выборки может повысить точность получаемых значений. А вот колебания в интервалах между выборками импульсов - энкодера CAN драйвера, например - могут снизить точность определения скорости вращения вала.
**❓**Как обнаружить
1️⃣ Заведите скоростной таймер (или таймер системного времени) и массив счетчиков для каждой ключевой функции.
2️⃣ Считайте гистограмму или среднее отклонение времени начала выполнения и времени выполнения с хранением одного значения по формуле:
M(n) = M(n-1) + ((t(n) - t(n-1)) - M(n-1)) / n
✳️ M - среднее отклонение, t - время (значение таймера), n - итерация.
3️⃣ В другом потоке, с комфортной для вас частотой, печатайте значение в отладочный вывод.
Регулярный мониторинг временных характеристик хоть и снижает производительность, но помогает обеспечить стабильную работу системы.
✅ Решение
1️⃣ Проверьте ISR(Interrupt Service Routine) (если это bare metal), для критических задач приоритет должен быть выше. Проверьте приоритеты задач (если RTOS(Real-Time Operating System)).
2️⃣ Вынесите обработчик из ISR и синхронизируйте данные при помощи FIFO или кольцевых буферов.
3️⃣ Проведите ревью кода, убрав рекурсивные вызовы и нерегулярные циклы.
4️⃣ Снижайте количество зависимостей от сторонних библиотек (например, printf).
Ставьте 👍🏻, если материал был полезен. Наберём 15 и больше - сделаю пример в коде 🎁
#IT #кейсы #embedded