シリアル通信ClearCommErrorでのエラーについてですが – プログラミング – Home

シリアル通信ClearCommErro...
 
通知
すべてクリア

シリアル通信ClearCommErrorでのエラーについてですが


ゆうか
 ゆうか
(@ゆうか)
ゲスト
結合: 24年前
投稿: 3
Topic starter  

こんにちは。
VC++とは関係しないかもしれないのですが、質問させてください。

シリアル通信でAPI関数
BOOL ClearCommError(hCommDev, lpdwErrors, lpcst)
を使っているのですが、lpdwErrorsが2となって返ってきます。

CE_OVERRUN(0x0002)文字バッファがいっぱいです。次に送られる文字は失われます。

ということみたいなのですが、どのように対処したらいいか分かりましたら
教えて下さい。
しかもこのエラーは今のところ、IBMのノートPC、ThinkPadでだけ起こります。
デスクトップPCでは起こっていません。

以上、よろしくお願いします。


引用解決済
トピックタグ
クラフトマン
 クラフトマン
(@クラフトマン)
ゲスト
結合: 24年前
投稿: 72
 

オーバーランエラーというのは、受信時に発生するハードウェアエラーです。
シリアル通信のハードウェアは、シリアルデータをパラレル変換して、ハー
ドウェア内のバッファ(1バイトのものもあれば、十数バイトのものもある)に
一旦保持します。これをCPU側が読み出すという動作を繰り返すわけですが、
CPU側が読み出す速度より、受信速度が速いとバッファーが一杯になり、受信
データが失われることになります。これがオーバーランエラーです。

原因としては、
1.受信速度が速すぎる
2.シリアル通信のハードウェアが低性能(受信バッファが少ない等)
3.ドライバが低性能(受信割り込みが適切でない、ハードウェアの設定が適
切でないなど)
4.シリアル通信より優先度の高い割り込みが長時間実行され、受信割り込み
が阻害されている。
などが考えられます。

まずは、通信速度を遅くして動作確認してみては如何でしょう?
それで動けば、後は高速通信を可能にする方法を探すことになります。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました