起因
最近在为iot power编写客户端,波特率是921600,上报的数据量差不多有40KB/s。
遇到了两件没法解决的事:
cpu占用很高
如图,要说原因的话,我一开始以为是刷图占用的cpu就这么高,不过原因并不是这个,接着看吧
蓝屏
这个问题就严重了,因为之前有一次蓝屏,导致vs工程代码全变成了0x00,害我重写了一遍,自从串口数据变多后,那一天电脑蓝屏了三次
测试
因为板子上用的是CH340N(立创买的,不可能是假货),所以第一怀疑对象就是它,所以我把串口三根线引了出来,外接了一块带CP2102的板子测试:
测试结果很明显,就是CH340N导致的,看看CPU占用就懂了
低了将近一半
其他人遇到过吗?
搜了搜,还真有人发现过这问题:CH340的驱动CPU占用率比竞品高很多,但是这篇帖子最后也没有得出结论,看沁恒官方的回复,全是邮件私联,完全没有公开解释的样子
那原因是啥呢?
对比测试
接下来又测试了FT232,发现会严重粘包,就知道事情不是这么简单了。
打开设备管理器的设置界面,原来相差这么大:
CH340N和CP2102的设置界面都是很简单的
而FT232。。。好家伙不愧是最贵的芯片
下面是测试结果:
芯片 | 占用 | 接收缓冲 | 延迟计时器 |
---|---|---|---|
CH340 | 50-60% | 不能改 | 不能改 |
CH343 | 50%左右 | 不能改 | 不能改 |
CP2102 | 30%左右 | 不能改 | 不能改 |
FT232 | 50%左右 | 4096 | 1ms |
FT232 | 20-30% | 1024 | 10ms |
为啥蓝屏?
不知道,我也搞不明白,官网最新的驱动装上也会蓝
结论
低速用用340没啥问题,但如果你要无人看守/高速传输。。。那就要慎重考虑了