裸机驱动的超时处理:重试怎样不掩盖硬件故障
裸机驱动遇到超时后直接原样重试,可能让总线更忙、让等待更长,还会掩盖真正的硬件故障。重试前先判断操作是否幂等,以及外设现在处于什么状态。
超时不是一个错误码
区分总线未响应、忙状态未释放、DMA 未完成和数据校验失败。每种情况需要的恢复动作不同:有的只需清状态位,有的要重新初始化外设,有的必须停止写入并上报。超时时间应基于协议和时钟配置,而不是随手写一个循环次数。
重试要有上限和退路
限制次数,记录失败原因,并在每次重试之间让出必要的硬件恢复时间。对写操作,先确认设备是否已经接收;不能确认时,不要重复发送可能改变状态的命令。
超过上限后进入明确的安全状态,例如停止电机、关闭输出或切换到备用传感器。把这条路径写进测试,才能避免现场出现“不断重试但永远不恢复”的假活状态。