Реакция на прерывание от датчика запаздывает на случайные 0–10 мс
Частота тика 100 Гц. Обработчик прерывания кладёт байт в очередь, его ждёт задача с самым высоким приоритетом:
void EXTI0_IRQHandler(void) {
uint8_t b = read_status();
xQueueSendFromISR(evt_q, &b, NULL);
clear_pending();
}
Задача начинает обработку не сразу, а с задержкой до 10 мс. Почему?
- Нет portYIELD_FROM_ISR — переключение ждёт тика
- Очередь из прерывания работает только через тик
- У прерывания EXTI слишком низкий приоритет NVIC
- xQueueSendFromISR копирует данные слишком долго
