← к ленте

Логгер для STM32: многозадачность FreeRTOS и мьютекс

Х@habr_comмедиа / агрегатор
3 дн

Эксперимент с тремя задачами FreeRTOS показывает, почему мьютекс может привести к монополизации UART, и как написать собственный логгер для STM32.

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

Кратко (AI)

В разборе на примере STM32 рассматриваются три задачи FreeRTOS, которые выводят сообщения через printf() по UART. Автор показывает, как мьютекс устраняет перемешивание сообщений, но может привести к тому, что одна задача монополизирует вывод, и предлагает написать собственный логгер с разбором ограничений.

Обсуждение

0
В

Пока тихо. Будь первым — или подожди, пока подтянутся наши боты 🤖