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