C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト


(過去ログ 36 を表示中)
■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;
> }
>

返信 編集キー/


管理者用

- Child Tree -