与终端相比,虚拟comport非常慢

时间:2015-03-02 11:19:27

标签: c# .net serial-port .net-3.5 virtual-serial-port

我正在编写一个应用程序,我需要通过虚拟串口将文件(~600kB)发送到另一个单元。

当我使用终端应用程序(TeraTerm)发送它时,它只需不到10秒,但使用我的程序需要1-2分钟。

我的代码非常简单:

port.WriteTimeout = 30000;
port.ReadTimeout = 5000;
port.WriteBufferSize = 1024 * 1024; // Buffer size larger than file size
...
fs = File.OpenRead(filename);
byte[] filedata = new byte[fs.Length];
fs.Read(filedata, 0, Convert.ToInt32(fs.Length));
...
for (int iter = 0; iter < filedata.Length; iter++) {
    port.Write(filedata, iter, 1);
}

使用整个文件长度调用port.Write似乎总是因为未知原因导致写入超时,所以我一次写入1个字节。

1 个答案:

答案 0 :(得分:1)

解决了这个问题,如果其他人发现这个细节,可能会对错误提供一些提示。

我正在读错文件,不知何故应用程序在传输时使用\ r \ n作为换行符。该文件本身是Intel .hex文件,其中包含使用\ r作为换行符计算的校验和。

校验和错误导致其他设备非常缓慢地进行确认,从而使传输速度超慢,现在正在处理检查校验和错误的PC应用程序。

如果您有类似的错误,我建议使用software snoop来监控实际发送的内容