1 问题描述
在开发一个瞄准系统,包含的头瞄功能中,需要实现云台实时随动。要求:1、用串口读取IMU的数据,获取实时姿态;2、用另一个串口控制云台实时随动。
单独测试云台头瞄时程序正常运行,但放入瞄准系统后(系统整体还包含图像显示、处理等功能)会Qt应用出现不定时闪退,具体表现为:
启动应用后,程序起初可以正常读取IMU数据并进行头瞄;
经过不定长的时间后(一般为几秒到十几秒),程序闪退;
Qt窗口自动关闭,控制台没有任何报错或警告提示,退出代码为-1073740940
2 代码诊断与解决方法
奇怪的退出代码一般都是内存泄漏问题,但网上没有找到类似的问题,由于云台转动功能之前就有,推断问题出在IMU数据读取上。
优快云上找到有在死循环内添加依据qApp->processExecute()解决的,但这个方法在这个系统上没有用,不过我的代码和他的代码有一点不同:
我的代码在读取IMU数据时,是直接从串口读取的(由于IMU数据发送频率很高,不需要担心缓存区没有数据,即使没有也可以用循环来等待),且使用waitforReadyRead()的方式不对,具体如下
while(1