> 私が確実なシリアル送受信が必要な場合、送受信の割り込みと > キュー(順番待ち行列)を使っています。 ちょうどいいサンプル > を見つけることはできませんでしたが、 調べてみてください。 ’¥r’ を’¥r’’¥n’に変換してるのに、なんといきなりファイル とは無茶ですね。 若しも受信した文字をそのまま返送してい たら(CrLf なんかやんないで)動いたのでは有りませんか? 受信文字に+CrLfなんかしちゃえば、割り込みタイプのエコーバ ックでも、一寸ファイルサイズが大きいとバッファーがオーバーフ ローしませんか? 実際の動きを冷静に考えてみて下さい。 先ず、単純なエコーバックにする事。 これだけで受信漏れは 直ると思われます。 受信、送信共にブロックタイプ(処理終了まで止まる)ですね。 これでは厳密には同時には動作出来ませんね。 割込みでなくとも同時動作可能なプログラムは書けます。 それは、 1 受信有りフラグがあったら受信し、バフッファーに書く、 受信フラグが無いなら次に、ここで待たないのがミソです。 (ファイルいじるならバッファーは2048バイト位は用意してね) 2 バッファーに送信文字が有り、送信バッファーが空なら 送信する。 送信終了を待ったりしない! をループで廻します。 途中で待ってはいけません。 何たって同時に動作させるんだから。 今出来る事 だけをやらせて外に出来る事が無いか調べさせます。 割り込みタイプ等は、また別問題ですね。 char r_buf[2048]; // バッファー int r_pt=0; // かきこみポインター int t_pt=0; // 読み出しポインター // 文字を格納 void put_buf(char c) { r_buf[r_pt++]=c; r_pt=r_pt & 2047; // リングバッファーですね。 } // バッファー内の文字数を取得 int len_buf() { int i; if(r_pt > t_pt) return(r_pt - t_pt); else return(r_pt +2408 -t_pt); } // 文字取り出し---必ず文字が存在する事 char getc_buf() { char c; c=r_buf[t_pt++]; t_pt=t_pt & 2047; return(c); } こんな感じでしょうか。 オーバーフロー対策までは 入れてませんからね! 実物ではやんないとしかられま すって言うか、いきなり暴走(文字が急に増えたり減った りします) 杉本 横浜市 緑区 東本郷 6-17-1-602 オンボード Tel: 045-473-7678 URL:www02.so-net.ne.jp/~ob_henry