- 締切済み
パリティビット有無での速度
初めまして、現在私はLINUX PCで 開発環境QTを使用しプログラムを組んでいます。 今回シリアル通信の速度について疑問が生まれましたので質問させていただきました。 ボーレート値:230400bps データ長:8bit で通信を行っているのですが、 今回の仕様としまして10秒ごとに190011バイト送信するようなプログラムを組んでいます。 また190011バイトを受信するようなプログラムも作成しています ノンパリティ設定で そこで処理速度を見ていると、 送信側のプログラムで、最初のデータ送信開始から最後のデータ終了までの時間を見ると9300msでした 受信側は9400msでした。 次にパリティビット有の設定で、上記と同じ試験を行ったのですが、送信側の処理速度が9300ms 受信側は9400msでした。 質問ですが、パリティを付加すると今回の場合で行くと190011バイトを10秒ごと(一気に送信は到底無理なので分けて送信しています)に送信するので、パリティビットが付加されると、単純に190011ビット増えることになります。今回のボーレート値は230400bpsなので、パリティ有とパリティなしでは0.7秒も差があることが計算でわかりました。 しかし今回の値を見るとさほど時間が変化していないことがわかりました。 そのようなことがあるのかわかりません。理由があるのならばわかりたいと思い質問させていただきました。 どうかよろしくお願いします。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- KEIS050162
- ベストアンサー率47% (890/1879)
もの(信号波形)を見ていないので推測でしかないですが、 実際には、パリティ無しの場合、Start(1)/Data(8)/Parity(0)/Stop(1) = 10Bit なので、 1900110 Byte x 10 Bit / 230400bps = 8240ms が、Idle Time =0 usの時の速度かと思われます。 実際には、9300msかかったとするとこの差は、通信割込(送信バッファ空)から送信処理にかかるオーバーヘッド分ということかと思います。 (この辺りは、オシロスコープでTXD Lineをモニターすると、はっきりと分かります。) 使っているUARTの仕様によりますが、送信バッファエンプティの割込みだとすると、8Bitのデータを受け渡し、シフトレジスタが8回回ったところで割り込みが発生する(と思われる)ので、パリティビットの有無によらず、送信処理は一定のオーバーヘッドで回っているのではないかと推測いたします。 これを送信完了(Stop Bit送信完了時)の割込みとすると、パリティビットの有無で1Bit分の差が出てくるのではないかと思われます。 送信割り込みを使っていない場合でも、挿神事になんらか送信完了のステータスを見ているはずです。 参考: http://www.softech.co.jp/mm_050907_firm.htm 先の通りオシロスコープで、各キャラクター間のIdle Timeの波形が、 (1)パリティ有り無しの違い、 (2)送信バッファーエンプティ/送信完了の割込みのどちらをモニターしているかの違い でどの要に変わるか見てみると、はっきりとするかと思います。 (波形は全部見る必要はないです。送信キャラクターを全部同じ、もしくはパターンが顕著に違う二文字の繰り返しにして、典型的な2~3バイトの送信分だけで上記は分かると思います。) 自信はないですが、試してみる価値はあります。