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