■18620 / ) |
Re[3]: マイコン(PIC)とのシリアル通信 |
□投稿者/ れい (536回)-(2008/05/15(Thu) 10:03:55)
|
■No18605 (組込系の人 さん) に返信 > こんな感じでどうでしょうか?
serialPort1のクラスが不明なので正確なところはわかりませんが、 たぶんダメですね。
StreamのRead/Writeの実装にはいくつかの流儀があります。 昔はいろいろありましたが、 最近は以下の振る舞いが一般的です。
・Readが戻るのは 「バッファがいっぱいになる」 「エラーが発生する」 「ストリームが終わっている(戻り値=0)」 「1バイト以上読み取る(戻り値=読み取ったバイト数)」
・Writeが戻るのは 「バッファを全て書き終わる」 「エラーが発生する」
です。 .Netでもこれが採用されています。 なので、読み取りが0バイトであるかどうか、常に確認しないといけません。 また、読み取りはなるべく同時にたくさん行うとよいでしょう。
> byte[] buffer = new byte[66]; > int pointer = 0; > int receivebytes = 0; > > while(pointer < buffer.Length){ > receivebytes = serialPort1.Read(buffer, pointer, buffer.Length - pointer); > if (receivebytes==0) throw new XXXException(); > pointer += receivebytes; > } >
|
|