关于在freertos内,发送串口信息丢数据的问题

#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的功能。做稳定。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Teleger

你的支持是我前进的方向

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值