0

仮想シリアルポート経由で別のユニットにファイル (~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 バイトずつ書き込みます。

4

1 に答える 1

1

解決しました。他の誰かがこれを見つけた場合の詳細を次に示します。何が問題なのかについてのヒントが得られる可能性があります。

私はファイルを間違って読んでいました。どういうわけか、アプリケーションは転送時に \r\n を改行として使用しました。ファイル自体は、\r を改行として使用して計算されたチェックサムを含む Intel .hex ファイルです。

チェックサム エラーにより、他のデバイスの ACK が非常に遅くなり、チェックサム エラーのチェックを処理する PC アプリケーションと組み合わされて、転送が非常に遅くなります。

同様のエラーが発生した場合は、ソフトウェア スヌープを使用して、実際に送信されている内容を監視することをお勧めします

于 2015-03-02T15:54:41.210 に答える