嵌入式技术论坛
直播中

刘杰

8年用户 1390经验值
私信 关注
[问答]

ec200发送1063次数据后就卡死是何原因呢?

项目采用移动元EC200的cat模块,采用开机————发送数据包给服务器————关机,这样的循环模式,经多次测试,开机————发送数据包————关机这样的模式循环最多能执行1063次循环,就会卡在(AT+IPR)这条指令这儿(程序并没有崩溃),按道理AT+IPR这条指令发出后即使没有响应,应该超时会退出,感觉at组件这儿的处理有bug。先前有测试发现执行开机关机循环600多次后在AT+Ati指令处卡死,后来把AT+ATI指令屏蔽了。所以整个情况来看,不知道at组件这儿为何不超时退出,而且都发生正常执行1063次这样的循环后发生,程序中log打印了线程信息,没有发现有线程堆栈溢出。即使是ec200模块的问题执行1063次后不响应数据了那么at组件超时后会退出当前代码块,而实际情况是超时了卡在那儿了导致应用函数不能返回。
1.jpg
2.jpg
3.jpg
MCU重启后又可以继续正常运行,再次执行1063次左右又卡住。

回帖(6)

刘敏

2023-5-17 11:22:24
排查方法:
(1)每次循环,确认内存是否有变化,是否存在内存泄漏问题
(2)卡死是 shell 命令卡死?还是整个系统停掉? 系统增加一个 调试线程,周期性打印LOG,确认是死机还是卡住
举报

刘杰

2023-5-17 11:22:31
只是那个应用线程卡住,系统还是运转的,shell可以执行ps和free。卡住后执行ps和free如下图,每次循环都有打印ps,堆栈使用变化率都不大。
1.jpg
举报

刘敏

2023-5-17 11:22:38
有可能是处理线程被挂起了,如果一直无法工作,就 list 信号量、互斥量之类的,确认为何不工作了
举报

李霞

2023-5-17 11:23:35
每次只是给4g模组断电哈,断电后 AT 组件是怎么处理的?
举报

刘杰

2023-5-17 11:23:42
断电后at组件没做任何处理,需要将at组件重新再初始化吗
举报

李霞

2023-5-17 11:23:48
是不是应该把 AT 设备注销掉然后上电后再重新初始化?
另外 EC200 也可以采用 lwip + ppp 拨号上网,如果 RAM 够用的话。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分