Обновить

Как Работать с UART на Микроконтроллерах (UART + FIFO = LOG)

Уровень сложностиПростой
Время на прочтение13 мин
Охват и читатели7.1K
Всего голосов 3: ↑3 и ↓0+4
Комментарии5

Комментарии 5

Есть много других вариантов организации отправки логов. Можно ждать отправки не всегда, а только в случае, если в программном буфере TxFIFO не достаточно места, чтобы добавить туда ещё одно сообщение, если позволяет логика программы, и с таймаутом. Можно вообще хранить сообщения об ошибках не в конечном виде (в данном случае текстовом, хотя возможны и много других вариантов), а в виде FIFO из специальных объектов с кодом ошибки, параметрами, и таймштампом, и преобразовывать их в выходной формат в одной из задач в суперцикле - это позволяет сильно экономить память на мелких микроконтроллерах. При этом число различных вариантов ошибок обычно ограничено, а если они повторяются быстрее отправки - сообщения о них можно объединять для экономии памяти. Ну а отправка по DMA вообще мало связана со способом добавления сообщений в TxFIFO - её можно использовать во множестве случаев, это больше зависит от используемого микроконтрроллера и скорости передачи данных. Разумеется, буфер TxFIFO должен быть выделен статически.

 При этом число различных вариантов ошибок обычно ограничено, а если они повторяются быстрее отправки - сообщения о них можно объединять для экономии памяти. 

Гениально!

Рискну посоветовать две вещи:
Первая (очевидная, да, кэп!) - не использовать один и тот же UART для логов и для связи с чем-то другим. Все-таки stdin, stdout и stderr это разные файлы, даром, что они почти всегда прицеплены к консоли.

Вторая: попробуйте пользоваться вызовами RTOS. По крайней мере FreeRTOS на серии ESPxx сама расставит мьютексы при инициализации драйвера и две задачи не попытаются писать в один UART каждая свое. Другими словами, многое из ПО системного уровня уже написано до нас ))

Мне на работе запрещено использовать FreeRTOS так как это "не доверенный код".

Все конечно же ради безопасности и надежности. В прочем, ничего нового.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации