Изучаем многозадачность FreeRTOS на примере создания логгера для STM32
Три задачи FreeRTOS с одинаковым приоритетом выводят сообщения через printf() по UART. В терминале вместо аккуратных логов — каша. Добавляем мьютекс, чтобы задачи не мешали друг другу, запускаем снова. И получаем новый сюрприз:
одна задача монополизирует вывод, а остальные молчат.
Причём вытесняющая многозадачность и Time Slicing включены, приоритеты равны. Почему же так происходит? На этом эксперименте можно разобраться, как планировщик взаимодействует с механизмами синхронизации, а заодно написать собственный логгер для STM32.
С исходным кодом и разбором ограничений получившегося решения.