外观
踩坑Robotics Stack Exchange2015-02-16
AVR 中断过载导致循环队列丢字节
本文由 AI 根据公开内容整理,可能有误,请以原文为准:How to manage interrupts on an AVR?(Robotics Stack Exchange #99)
状态:已解决
问题
AVR 上多个中断服务例程使用无边界检查的循环队列;过载或偶发负载升高时队列会丢失成块数据,即使平均处理器负载约 70% 也可能随机填满。
环境
Linux / ROS 机器人软件与控制通用开发环境
解决办法
- 建立状态调试输出,至少用状态 LED 区分成功包和校验失败包,先确认丢字节的具体原因。
- 对外部问题,用示波器夹到输入引脚,检查线噪声、接线瞬断或无线信号丢失。
- 若因关中断过久导致端口新字节覆盖旧字节,确保最长关中断时间小于传输一个字符的时间。
- 具体做法是减少关中断持续时间,或降低通信比特率以增加单字符传输时间,或两者同时做。
原问题作者:ronalchn;采纳答案作者:David Cary。原内容依 CC BY-SA 4.0 授权,本页摘要同样依 CC BY-SA 4.0 授权。
来源
本页事实对应的公开页面,以原文为准。