前些日子使用V4.1.1做一个AT组件适配,测试期间莫名其妙遇到内存FREE的失败的问题。
https://club.rt-thread.org/ask/question/155289fff4c21c5d.html
问题比较出现得比较固定,我就怀疑是我写的驱动问题,有内存没有free,或者分配失败没检查。
就把所有数组开成全局变量,问题依旧,只是出错的位置不一样了。但都是涉及同一个函数及一个网络层,分别的rt_free,SAL.。
期间尝试DEBUG跟踪,但发现SAL是不能debug.
又怀疑了是不是单片机问题,毕竟是HC32,bug一百度还是有很多。
最后尝试替换到现有的STM32平台,使用rt thread studio开发,包版本还是4.1.1。最后还是同样的问题,打印出同样的函数错误。
最后尝试降版本操作V4.0.5,神奇地正常了,通过加载mqtt包,再次测试收发就一点问题都没有了。
(补充一下:pahomqtt应该是大佬们要适配V4.1以上的内核,没改好kconfig,不能在线拉取.我暂时去仓库找个旧版本去替换env的kconfig,版本要选V1.1.0,就可以正常拉取了,last只能用在V4.1以上的内核)
对应的KCONFIG文件是不一样了,也尝试去配置memory选项,试过多种配置都出现同样问题
那说明你之前的代码其实在实现上还是有一些隐藏的bug,只是在新的内核暴露了
在rt_free之前判断入参是否为NULL,并且如果该内存地址是全局变量,那应该在rt_free之后将其赋值为NULL
我原本的程序原封不动,直接只替换了内核文件,编译下载测试了到现在都没有问题️🤨,连续挂网两天不停重连调用,期间随机测试都收发都正常