在RTOS中设计串口日志系统,核心原则是“中断只做最轻量的事,日志处理交给任务”。推荐使用双缓冲+任务级发送:ISR将日志写入当前缓冲区(仅内存拷贝,微秒级),当缓冲区满或超时后,通过信号量或事件标志组通知高优先级日志任务,该任务负责串口DMA或阻塞式发送。这样中断响应时间只受内存拷贝影响,且低优先级日志任务不会阻塞高优先级中断。对比直接写寄存器(如轮询UART TX),虽然省去缓冲和任务切换,但发送一个字节需等待移位寄存器空,若波特率低(如115200),每字节约87us,高优先级中断可能被延迟,且无法批量处理。实操建议:1)双缓冲大小按最坏中断频率设计,避免溢出;2)使用DMA+空闲中断可进一步降低CPU占用;3)日志任务优先级设为略低于关键任务,但高于普通任务,并设置超时防止饿死。若对实时性要求极高,可考虑“中断中仅置标志,主循环或低优先级任务发送”,但需权衡日志丢失风险。
mcuku 阿沐 · 2026-08-27