串口数据收多了就死机了?
最近调试供应商设备的 mobus 协议,发现了几个串口问题,设备上电前发数据给设备,设备死机了;连续发数据给设备,设备也死机了。
其实从鱼鹰的角度看,这都是软件设计不合理的表现。正常情况下,以上情况都不应该导致死机问题。
还记得前东家一个合作商也有死机现象,后面调试后发现,就是一个串口过载错误没处理导致的,很简单的问题,但对于不熟悉的人来说,很难解决,因为是偶发现象,比较难定位。
像这种串口问题,鱼鹰以前也分享了很多,就不啰嗦了。
这里简单从发送方(主控)的角度,猜一猜为啥设备端会出现上面问题。
主控在设备上电前就发数据给设备,如果设备端串口初始化顺序没做好,是有可能出现死机问题的,另外如果程序有boot,更可能导致死机问题。
有boot的情况下,如果跳转app前没处理好外设,那么是有可能死机的。
而跳转到app后,如果没有处理好中断、dma、串口之间的初始化顺序,中断处理没有对相关错误进行处理等,都有可能导致死机。
而连续接收导致的失联无法恢复问题,大概率是数组越界,或者中断没处理好导致的。
如果是鱼鹰设计的串口接受程序,921600连续接收完全没问题,更高波特率也不再话下,唯一的瓶颈就在buff大小,可能导致某帧数据接收不完整,但绝不会导致死机这种严重问题。
下次通信还是正常的,而不是再也通信不上。
但设备一般都有处理时间,短期内的数据爆发可能没多大问题,长时间的,设备处理不过来(有处理时间),即使接收程序写的再好也没用。所以设备一般会要求帧帧数据的间隔时间。一般5ms,10ms还是可以的。
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐


所有评论(0)