Я ищу совет о том, как наилучшим образом реализовать поточно-ориентированный ввод-вывод (например, для printf, идущего на отладочный последовательный порт) в среде, в которой планировщик операционной системы может еще не запуститься, работать, приостановиться или может остановились или разбились. Я использую Newlib и FreeRTOS.
В настоящее время я использую (казалось бы, стандартный) подход FreeRTOS, заключающийся в том, чтобы символы очереди системного вызова _write (Newlib) помещались в очередь FreeRTOS , которая затем освобождалась от подпрограммы обработки прерываний ( заполнение последовательного порта аппаратного FIFO, затем ожидание пустого прерывания FIFO).
Это имеет тот недостаток, что (по крайней мере, во FreeRTOS) очередь может безопасно использоваться только при работающем планировщике, а выходные данные отладки не могут быть напечатаны, когда прерывания отключены (как во время загрузки до запуска планировщика, или после фатальной ошибки (именно там, где отладочный вывод printf будет наиболее полезным :-).
Желательно ли, чтобы системный вызов _write запрашивал планировщик и / или состояние прерывания, и использовал очереди, если планировщик работает, и использует последовательный ввод / вывод блокировки / опроса, когда прерывания отключены? Есть ли более изящная идея, о которой я еще не подумал?
Спасибо