【结贴】at_device软件包中对串口接收数据缺少判断导致数据接收异常

发布于 2020-07-15 17:05:20

在调试BC28通信的过程中,使用了从官方下载的at_device软件包,版本为1.2.0,
时钟过程中发现,BC28返回数据正常,而返回关键字校验始终不通过。

查看更多

关注者
0
被浏览
141
xiangxistu
xiangxistu 2020-07-16

看到这里是永久等待,应该是串口回调通知的数据到达。
看这样应该是故障导致得唤醒,具体的返回错误是什么,为什么会出故障呢?

这个修改挺好的,可以提交到 RTT 的 github 仓库呀!

2 个回答
通宵敲代码
通宵敲代码 2020-07-15

经过数据分析及对通信线路进行抓包发现,BC28返回值正常,且通信没问题,而at_device缓冲器用来与关键字对比的数据出现了异常,字符重复以致超出缓冲区长度,内容如下所示
QQ截图20200715165130.png

从图片看,右侧BC28返回数据数据始终正常,且已经连接到网络中,但程序运行始终返回失败。
对at_device软件包进行分析,发现通信过程建立了一个at_clnt0线程,且通信接口使用了uart2设备,接收在终端中完成,程序线程及设备列表如下图
QQ截图20200715165236.png

推测是at_device从uart2设备缓冲区读取字符时出错,
对程序分析发现,at_device在从串口缓冲区读取字符时,并未对返回值进行判断,而直接将其存入自身的缓冲区,这就导致即使串口没有接收到数据,也会循环读取串口缓冲区中的最后一个字符,如下图
QQ截图20200715165548.png

针对此问题我们在at_device从串口取字符时增加返回值判断,修改后程序如下
修改后.png

重新编译下载测试,返回值判断正常,BC28模组驱动正常
正常通信.png

撰写答案

请登录后再发布答案,点击登录

发布
问题

分享
好友