CH32V307以太网TCP,在while里存在大于2ms的阻塞时,接收数据会卡顿、慢。

应用需求是向服务器发送HTTP请求获取一个8MB大小的文件,然后写入到spi flash(W25Q128)。

每接收到一包数据就写入flash,但是因为写flash需要时间,会存在几个毫秒的阻塞。
因为这点阻塞,会导致数据接收很慢、卡顿,但卡顿的时间远超这几个毫秒。

想知道具体的原因以及解决办法,已附带上工程文件。

视频太大,上传不了,贴个链接,打印的是接收到的数据长度(累加)。


问了下GPT,给的答复是:
TCP 使用一个叫做滑动窗口的机制来控制数据的发送和接收。如果接收方不能及时处理和确认数据,发送方的窗口大小会减小,从而减少发送速度。当你的代码在处理接收到的数据时产生延迟,发送方可能会降低发送速度以避免网络拥塞。


icon_rar.gifCH32V307RCT6-CYC3.zip


您好,307的例程是通过在主函数中查询的方式实现的网络通信,因此在主函数中的操作都会导致阻塞,因此建议将网络传输部分放到定时器中断或搭配操作系统(给网络分配一个任务)实现,从而避免其他操作影响网络运行。附freertos例程:

icon_rar.giffreertos_net.zip

如有其它问题可邮箱联系(zl@wch.cn)


只有登录才能回复,可以选择微信账号登录