[麦麦茶水间] 【每周分享】串口打印影响实时性

[复制链接]
17|1
happypcb 发表于 2026-7-16 10:17 | 显示全部楼层 |阅读模式
调试的时候习惯加串口打印,看变量值,看程序跑到哪里了。但是有时候串口打印本身会影响程序的行为。
之前做一个电机控制的项目,调试的时候加了串口打印,每10ms打印一次电流值。电机跑起来之后发现有轻微抖动,去掉串口打印之后抖动就消失了。原因是串口打印太慢了,占用了CPU时间,导致控制计算被延迟。
115200波特率下,打印一行二十几个字符,差不多要两毫秒。在10ms的控制周期里,两毫秒占了百分之二十。串口打印占用了CPU时间,控制计算被延迟了,电流环响应变慢了,电机就抖了。
后来把串口打印频率降低了,从每周期打改成每100周期打一次,或者只在特定条件下才打印。调试信息通过DMA方式发送,不占用CPU时间。改完之后电机就不抖了。
还有一种是printf重定向到串口,如果实现得不好,可能会在中断里调用printf,导致中断服务函数执行时间过长。printf内部可能会关中断,如果在中断里调用,会影响其他中断的响应。
现在调试的时候会区分调试打印和运行日志。调试阶段随便打,发布之前把不必要的打印删掉或者用条件编译关掉。运行日志只记录关键事件,不每周期打。这样既保留了调试信息,又不影响实时性。

我吃小朋友 发表于 2026-8-30 07:44 | 显示全部楼层
学习了,以后在设计实时系统时,会注意串口打印对性能的影响。看来需要在调试和性能之间找到平衡点。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1904

主题

8361

帖子

3

粉丝
快速回复 在线客服 返回列表 返回顶部
0