Задача управления двигателем пропускает дедлайн, пока работает сетевой стек
Три задачи: ctrl (приоритет 4, период 5 мс), net (приоритет 3, долгая обработка пакетов) и storage (приоритет 1). ctrl и storage делят шину SPI, защищённую так:
spi_lock = xSemaphoreCreateBinary();
xSemaphoreGive(spi_lock);
Трассировка показывает: storage взяла spi_lock, её вытеснила net, и ctrl ждёт шину по 40–60 мс. Что исправить?
- Защищать шину мьютексом, а не двоичным семафором
- Понизить приоритет ctrl до уровня storage
- Брать семафор с таймаутом вместо portMAX_DELAY
- Перенести обработку сети в прерывание
