Vovan Sidorovich
Никаких там основ нет. Типа пользуйтесь готовым.
Повторю вопрос. Есть printf или ещё какая выводилка.
Задача через РТОС вывести в КОМ порт правильно строку произвольной длинны.
Из printf сматывается в кольцевой буфер(очередь).
1. Если буфер заполнен понятно как передать. Но не понятно как усыпить вызывающюю задачу с printf(помним что задач несколько) до окончания предачи того что в буфере, а лучше до освобождения хотя бы одного места в буфере.
2. Если printf вывел меньше буфера, то как узнать что он уже всё вывел и начать передачу?
3. А лучше запускать в момент вывода чтобы и продолжал сматывать в кольцевой буфер и сразу начал передавать передавая упраление другой задаче если вдруг какая пауза(см п1).
Задачь с printf несколько. как разделить порт на уровне вызовов printf понятно(открывать порт).
Вот вам один из вариантов для абстрактной ОС.
Заменяем printf своей реализацией, там выделяем память под полученную, целую, строку и пихаем указатель на эту строку в очередь ОС.
С другой стороны очереди, отдельная задача, достаёт оттуда указатель на строку и пихает её в КОМ порт. После окончания отправки занятую память освобождает и поновой.
Так же в свой printf можно добавить обработку ситуации когда память кончилась или место в очереди больше нет. Можно например подождать когда ресурсы освободятся.