Вступить в клуб →
средняявопросFreeRTOS: задачи, очереди и синхронизация

Реакция на прерывание от датчика запаздывает на случайные 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 копирует данные слишком долго

🔒 Проверка ответа — для участников клуба

  • Проверка ответа
  • Подсказка, если застряли
  • Разбор с объяснением, почему так
  • Прогресс по всем задачам и виртуальные собеседования
Зарегистрироваться →

Регистрация занимает минуту

Другие задачи раздела