#1.问题起因#
调试app时发现,发送串口信息时丢数据,每帧发送128字节都会偶发不完整。
#2.问题运行环境#
TuyaOs OS 开发RTL8720CM 系列模组应用;
该系统在 这个系列的芯片上跑 类似rtos的系统。所以 就简单认为它是封装了freertos的。
实际上 调用的接口,跟freertos上的接口基本一致,只是名字些许不一样。
好了,大致讲了下运行环境。
#3.发现问题后尝试将发送的数据量减少#
在发现问题前,都是每次传输256个字节,但是波特率在115200的情况下,传输这么多字节,显然是不理想的。更何况这个串口,不支持异步,支持阻塞发送,不支持dma方式,所以,我将发送的字节缩短至之前的一半,256->128,但是测试下来,还是丢数据。
#4.发现问题尝试改新的方法#
通过新建任务线程,将发送的串口数据通过队列发送出去;队列的阻塞时间是0xffffffff
但是通过几轮的测试发现,还是有丢数据的情况。
#5.发现问题新突破#
问题已经有2周了。进展缓慢。我向同事请教,同事要我尝试关闭总中断,进入临界值;
我尝试去做了;但是结果是:系统极不稳定;偶尔死机。但是数据仍然存在接收不完整或是错误的情况。不应该说是错误,帧的数据是分开发送了。
#6.发现问题关键定位点#
每次发送一个帧,我都包含固定头,可以简单理解为,发送数据前,我封装了数据,加了0x55 0xAA 类似的数据。然后我用逻辑分析仪查看,当接收端接收到的数据不对,或者说数据量不对时,有些帧数据之间竟然有1ms的延迟。
我在发送端是没有做这个延迟的,但是用分析仪看,却有、问题终于发现了。
于是啊,我提高了发送线程的优先级,心想肯定是其他任务打断了发送了。
这次数据每次都能够发送完整了;
#未完待续#
本次发送数据是为了串口端接入的mcu做ota升级用的。而mcu的固件大小在20kb以上。期待能够快速完成给mcu的功能。做稳定。

343

被折叠的 条评论
为什么被折叠?



