最近做电调调试的时候发现串口协议没问题但是到了PWM协议油门加到1700左右电机就会反向。本来以为是失步或者脉宽计算溢出等等稍微复杂的问题DEBUG、JLINK、Print各种方式排查了很久。PWM发生没问题代码计算脉宽没问题油门校准没问题查遍了最后发现是中间变量溢出了把32位中间变量换成64位就解决了。具体来说是这样的Δ pulse - min_pulse Δ * 2000 若 ≥ 2^31 2,147,483,648则作为 int 解释时为负数。 解 Δ * 2000 ≥ 2,147,483,648 → Δ ≥ 1,073,741.824 → Δ ≥ 1,073,742。 代入 pulse min_pulse Δ 863,230 1,073,742 1,936,972 纳秒 ≈ 1937us。最简单的问题竟然没有最开始排查