я не знаю за threadX но на тнео, фриртос итд так. 2 задачи логер и уарт и очередь сообщений
Задача логер ждет появления сообщения в очереди в которую могут отправлять сообщение все потоки
Отправка идет сервисом отправить с таймаутом. При сработке таймаута поток уже сам решает, что ему делать с этим сообщением, пропустить или сохранить локально.
Задача логер имеет очередь на n указателей. Память для данных аллокируется потоком и освобождается задачей логером.
При приходе очередного сообщения данные помещаются в кольцевой буфер и устанавливается семафор для задачи передачи данных из кольцевого буфера в уарт.
Если места в кольцевом буфере нет сообщения из очереди не вычитываются.(ожидаем семафор от уарт о передаче фрэйма и освобождении кольцевого буфера) При заполнении очереди все потоки ставятся на ожидание с таймаутом(написал выше)