我正在寻找有关如何在操作系统调度程序可能尚未启动、正在运行、暂停或可能已停止的环境中最好地实现线程安全 IO(例如,用于调试串行端口的 printf)的建议,或者坠毁。我正在使用 Newlib 和 FreeRTOS。
目前,我正在使用(看似标准的)FreeRTOS 方法,将 _write 系统调用(Newlib)队列字符放入 FreeRTOS队列,然后从中断服务例程中清空(填充串行端口硬件 FIFO,然后等待FIFO 空中断)。
这样做的缺点是(至少在 FreeRTOS 上)队列只能在调度程序运行时安全使用,并且在禁用中断时无法打印调试输出(因为它们在引导期间直到调度程序启动,或者在致命之后错误条件(正是调试 printf 输出最有用的地方:-)。
最好让_write系统调用查询调度程序和/或中断状态,如果调度程序正在运行,则使用队列,并在禁用中断时使用阻塞/轮询串行IO?有没有更优雅的想法我还没有想到?
谢谢