在使用paho mqtt的时候,设备多次通讯后,总是会报错死机。
设备每次通讯的数据基本是一样的,是不是内存溢出了。
请问大家这个什么原因?
应该如何处理?
MQTT的数据
{"id":"11896345","tk":"0ee5047164668765a477473c3e329b84","sn":"123112540258","ts":"1639552560","propList":[{"senId":0,"propType":100001,"val":"22.00"},{"senId":0,"propType":100003,"val":"90.00"},{"senId":0,"propType":100002,"val":"4.08"},{"senId":1,"propType":301001,"val":"96.00"},{"senId":1,"propType":301003,"val":"17.53"},{"senId":1,"propType":301004,"val":"0.00"},{"senId":2,"propType":301001,"val":"102.00"},{"senId":2,"propType":301003,"val":"22.28"},{"senId":2,"propType":301004,"val":"0.00"},{"senId":3,"propType":301001,"val":"118.00"},{"senId":3,"propType":301003,"val":"17.23"},{"senId":3,"propType":301004,"val":"0.00"},{"senId":4,"propType":301001,"val":"92.00"},{"senId":4,"propType":301003,"val":"18.06"},{"senId":4,"propType":301004,"val":"0.00"},{"senId":255,"propType":200001,"val":"0"},{"senId":254,"propType":200001,"val":"0"},{"senId":253,"propType":200001,"val":"0"},{"senId":252,"propType":200001,"val":"0"},{"senId":251,"propType":200001,"val":"0"}]}\0
----- mqtt lenth=976 -----
以下是报错信息
psr: 0x01000000
r00: 0x5531cb72
r01: 0x00000000
r02: 0x5531cb73
r03: 0x00000000
r04: 0x00000000
r05: 0x00000033
r06: 0x3130333a
r07: 0x00000400
r08: 0x00000000
r09: 0x0000002c
r10: 0x00006f72
r11: 0x24019838
r12: 0x0804294d
lr: 0x0800bc65
pc: 0x08000616
hard fault on thread: mqtt0
thread pri status sp stack size max used left tick error
-------- --- ------- ---------- ---------- ------ ---------- ---
LoraRecD 8 suspend 0x0000041c 0x00002000 21% 0x00000005 000
LoraRecD 8 suspend 0x0000041c 0x00002000 21% 0x0000000c 000
tshell 20 suspend 0x00000104 0x00001000 06% 0x0000000a 000
mqtt0 10 running 0x0000029c 0x00002000 12% 0x00000001 000
wiz 5 suspend 0x00000094 0x00000400 25% 0x0000000b 000
wiz_stat 28 suspend 0x0000008c 0x00000800 16% 0x00000007 000
sim1 30 suspend 0x000000a0 0x00000600 18% 0x00000012 000
at_clnt 9 suspend 0x000000b0 0x00000600 19% 0x00000001 000
sys_work 23 suspend 0x0000005c 0x00000800 56% 0x00000008 000
tidle0 31 ready 0x00000054 0x00000100 32% 0x0000000f 000
timer 4 suspend 0x00000074 0x00000200 22% 0x00000009 000
main 10 suspend 0x0000011c 0x00000800 40% 0x00000008 000
FPU active!
bus fault:
SCB_CFSR_BFSR:0x82 PRECISERR SCB->BFAR:5531CB72
您好,感谢您的回复,还想再请教一下
我测试后发现,used memory会随着每次Mqtt的传输而缓慢增加,直至系统异常或者报错。
total memory: 435952
used memory : 79292
maximum allocated memory: 82768
在我自己写的代码中没有使用mallco去申请过内存,都是局部变量或者全局变量,请问在这样的情况下要如何查找内存泄露的问题?
mqtt0这个线程应该是我使用的软件包带的,目前我还在找不到他在哪里。
我使用的是paho mqtt,网络通讯采用AT包+SIM7600,和W5500有线网络,这两种方式都会导致内存泄露而死机。
这是来自我另一个问题的答案:
经过检查发现,并不是paho mqtt和mymqtt的软件包有泄露内存的问题,而是我自己用Cjson产生数据的时候,导致的内存泄露,代码可以参如下。
这个是Cjson的相关操作,可以参考
https://blog.csdn.net/qq_33417509/article/details/112233612?utm_medium=distribute.pc_relevant.none-task-blog-baidujs_utm_term-0&spm=1001.2101.3001.4242
这个是一个大佬调试kawaiimqtt的经历。
https://blog.csdn.net/fhqlongteng/article/details/120505002
到现在我用过了paho-mqtt,my-mqtt,kawaii-mqtt
paho-mqtt使用中还是会有hard falut产生,
ma-mqtt目前情况还行,看看后面会不出问题
kawaii-mqtt,在RTT上运行,能连接通讯,会报AT socket timeout的错,后面没有继续使用。