CC2530大数据通信程序卡死
我在使用TI CC2530芯片两台设备(协调器和终端)进行组网通信:E终端设备1000字节/S发数据给协调器C设备,通信几个小时后C设备出现程序卡死现象且串口无调试信息打印和接收数据输出,两台设备都启用芯片自带看门狗功能(正常运行时可控制程序重启)但卡死后看门狗不存在喂狗也不复位重启,只能通过手动拔插电源重启协调器设备后才能再次进行组网通信。
暂时不清楚什么原因导致程序卡死,有两次都是C协调器重新启动网络获取到地址NLME_GetExtAddr()后卡死,此时终端设备还未连接之后也无法连上。开始我自己在应用程序和osal_start_system函数内都有做了超时重启功能,通过TI定时器超时计数,但是卡死后无法确定是定时器失效未计数还是没有运行到超时重启位置,都不能够控制设备重启。现在我对APP的主循环进行检测,因为串口无法打印只能用IO口控制来识别,若连主循环真不知道该怎么重启设备。
目前设备没有硬件看门狗功能,而且以前都能长期进行小数据量通信一直没有问题。想请问这是否可能是内存溢出导致或者其他什么可能原因,有什么好的排查和处理方法?非常感谢!
终端节点每次给协调器发送的一帧数据有多少?最好不要太长。
你好,Sower lian ,你的问题解决了吗?我这边也怀疑是较大的数据通讯导致程序死掉,通讯量每次可能有200多字节,从现象上看快速控制会发现程序很容易死掉,但是过很短时间看门狗能拉起来,但是放置长时间,断断续续的控制后自己死掉了,非要断电下或按下复位按键才可以恢复运行。和你一样设置了看门狗,另外还有设置一个定时器2个小时没有接收到控制则重启一次,然而这些似乎都没用,已经不知道该怎么解决了。
1,在halAssertHandlerStatus,可能是你的程序进入halAssertHandlerStatus了,检查osal_mem_free是否对一个NULL指针或者已经释放过的指针做了释放操作。
2,查看晶振是否虚焊。
你好,Aries Lord ,感谢你的回答,针对你说的两种可能,1 我检查了下,程序定义了HALNODEBUG,也就是halAssertHandler没用了,程序里的osal_mem_free应该是有正确使用的,不然的话程序应该会死掉很快吧;2 晶振是好的,测试设备有很多个,地方也不同,,用途是做为红外学习和遥控,,加了看门狗程序短期内是没有问题的,出问题的都是时间过了1个2个星期甚至更长,同时烧写的相同程序,操作方式也大致相同,但是这个可能几天就离线了,其他的却还正常,可能再过个几天其他的也离线了,这种离线都是要断下电或者复位一下,程序马上就好了,开始正常工作,可以排除自身网络问题的离线,,我猜测是内存上的出错,定时器应该是没有在执行了的。所以目前不确定是什么问题,也不知道该怎么解决了,有什么解决办法的话麻烦指导下