Пару мыслей. прием по UART - в кольцевой буфер с оповещением о переполнении.
Я так понял TNKernel. Если используются стандартные строковые функции и есть признак конца строки например "0x0D 0x0A" то может оказаться удобнее использовать блоки памяти фиксированной размера. В этом случае по завершении строки приема отправляем указатель на блок через очередь.
Задача П решила что надо отправить СМС, через передачу сообщений (или как лучше ? ) отправляет задаче M команду.
Тут тоже блоки пригодятся, для разделения приём/передача можно например использовать первый символ блока.
Вот атомарность операций и ресурсов и прочие тонкости вытесняющей пока вводят меня в состояние паники.
привыкнуть надо.