Возможно где то не отдаете семафор-мутекс, возможно у задач приоритет не такой, возможно приоритет прерывания "выше" чем системный тик, возможно в прерывании не хватает portYIELD_FROM_ISR. Короче проблем может быть много, но можно сказать одно, если все правильно спроектировано то работать будет правильно. Без исходников много можно чего насоветовать.
Сделайте у задач одинаковый приоритет и посмотрите что получится, вставить в низкоприоритетной задаче vTaskDelay на несколько тиков после того как отдаете мутекс, может freertos не успевает понизить приоритет во время перехода мутекса.
|