现象:使用DMA接收数据时接收数据不完整导致后面的数据无法正常解析陷入死循环或者直接进入断言
原因:
实际并非接收数据不完整,空间内有脏数据没有清空
1.进入断言原因:多条数据的解析以\r\n为结尾,断言中有对指针为空的判断以及指针指向空间为空的判断,数据不完整的表现为指针指向空间为空,因为指针为char*,但是数据缺失结束符'\0'
2.实际上数据并非不完整,而是设计中在每一次接收都可能会有接收缓存区的地址以及大小的改变,重新申请堆上的空间时没有memset所以堆上的空间有一些乱七八糟的数据
陷入死循环原因:在没有加入断言之前,处理多条数据以\r\n作为结尾,如果没找到\r\n返回-1,然后指针移到未处理的位置,如果数据缺失的情况下会一直进入循环然后指针前移。
解决方案:
1.在每一次重新申请时加上memset
2.同时获取长度函数如果找不到直接返回整个长度而不是返回-1,直接强制跳过有问题的部分