通知
すべてクリア
Topic starter
2001年12月28日 11:05 AM
こんにちは。
VC++とは関係しないかもしれないのですが、質問させてください。
シリアル通信でAPI関数
BOOL ClearCommError(hCommDev, lpdwErrors, lpcst)
を使っているのですが、lpdwErrorsが2となって返ってきます。
CE_OVERRUN(0x0002)文字バッファがいっぱいです。次に送られる文字は失われます。
ということみたいなのですが、どのように対処したらいいか分かりましたら
教えて下さい。
しかもこのエラーは今のところ、IBMのノートPC、ThinkPadでだけ起こります。
デスクトップPCでは起こっていません。
以上、よろしくお願いします。
2001年12月28日 11:48 AM
オーバーランエラーというのは、受信時に発生するハードウェアエラーです。
シリアル通信のハードウェアは、シリアルデータをパラレル変換して、ハー
ドウェア内のバッファ(1バイトのものもあれば、十数バイトのものもある)に
一旦保持します。これをCPU側が読み出すという動作を繰り返すわけですが、
CPU側が読み出す速度より、受信速度が速いとバッファーが一杯になり、受信
データが失われることになります。これがオーバーランエラーです。
原因としては、
1.受信速度が速すぎる
2.シリアル通信のハードウェアが低性能(受信バッファが少ない等)
3.ドライバが低性能(受信割り込みが適切でない、ハードウェアの設定が適
切でないなど)
4.シリアル通信より優先度の高い割り込みが長時間実行され、受信割り込み
が阻害されている。
などが考えられます。
まずは、通信速度を遅くして動作確認してみては如何でしょう?
それで動けば、後は高速通信を可能にする方法を探すことになります。