与终端相比,虚拟端口非常慢
virtual comport is very slow compared to terminal
我正在编写一个应用程序,我需要通过虚拟串行端口将文件 (~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 个字节。
已解决,这是详细信息,以防其他人发现此问题,它可能会给出一些错误提示。
我读错了文件,不知何故应用程序在传输时使用 \r\n 作为换行符。该文件本身是一个 Intel .hex 文件,其中包含使用 \r 作为换行符计算的校验和。
校验和错误导致其他设备的 ACK 速度非常慢,因此与现在处理校验和错误检查的 PC 应用程序相结合,传输速度非常慢。
如果您有类似的错误,我建议您使用 software snoop 来监控实际发送的内容
我正在编写一个应用程序,我需要通过虚拟串行端口将文件 (~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 个字节。
已解决,这是详细信息,以防其他人发现此问题,它可能会给出一些错误提示。
我读错了文件,不知何故应用程序在传输时使用 \r\n 作为换行符。该文件本身是一个 Intel .hex 文件,其中包含使用 \r 作为换行符计算的校验和。
校验和错误导致其他设备的 ACK 速度非常慢,因此与现在处理校验和错误检查的 PC 应用程序相结合,传输速度非常慢。
如果您有类似的错误,我建议您使用 software snoop 来监控实际发送的内容