tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
[ツリー表示へ]  [ワード検索]  [Home]

タイトル Re: シリアル通信の割込み禁止
投稿日: 2009/10/19(Mon) 01:05
投稿者オショウ
> 割り込み禁止?の手続きがわからない為、途中で受信割り込みが
> 走ってしまい、うまくいかず困っています。

  数々シリアル通信のコードは書いてますが・・・
  わざわざ割り込み禁止にしなければならない理由
  が解りません。

  確かにシリアル通信は、全2重なので、送信しながらや
  受信しながら、反する受信する・送信するという機能は
  行えます。

  が、一般的にコマンド等文字列を送信し、相手から何等
  かの結果(ステータス)が返信されてこないと、次の送
  信は行いません。

  よって、動作は半2重的です。

  今回、問題になっているのは、送信の完了・受信の完了
  が正しく行えていない為に発生しているのでは?
  また、シリアル通信のタイムアウト設定が為されてませ
  んが、タイマーでタイムアウト処理を行わせることも、
  可能です。

  汎用的に行うのであれば、シリアル通信クラスのタイム
  アウト設定を使うより、送信完了後の受信タイムアウト
  にタイマー使う方がある意味便利です。

  それと、SerialPort_DataReceivedで、わざわざデリゲー
  ト使ってSetRecieveDataを行わせると、実際に受信バッ
  ファにデータが着ているにも関わらず受信動作が行われ
  るのが余計に遅延してしまいます。

  ReceivedBytesThreshold = 1
  と言う設定ですが、実際にDataReceivedのイベント処理
  に入った段階では、1バイト以上の受信データがバッファ
  に入っている場合もあります。

  シリアル通信は非同期処理なので、わざわざ割り込みを
  どうこうする細工を行うより、イベントが発生した時点
  で、バッファにあるデータを一気に読出し、アプリ内で
  の受信データ処理で細工をする方が安全です。

  因みにそのマイコンとの通信ですが、プロトコルが定義
  されていると思いますが、アスキー通信?バイナリ通信?

  またアスキー通信の場合、デリミタがあるならば、その
  デリミタを受信待ちさせるようにしてやれば、受信ルー
  チンが簡素化し高速化します。

以上。参考まで

- 関連一覧ツリー をクリックするとツリー全体を一括表示します)

古いスレッドにレスはつけられません。