dポイントプレゼントキャンペーン実施中!

シリアル通信 大きいサイズの受信処理で質問があります
OS:LINUX
開発環境 QT5.3

今 相手側機器から10秒ごとに190011Byteのデータくるようなしようとなっています
そこで質問ですが
受信側ではどのような処理を組めば10秒ごとに来るデータをすべて受信できるのか
よろしくお願いします

open関数やread関数などを使用しています
ボーレート値は230400bpsです
送受信バッファは1024byteとなっています

A 回答 (3件)

> read関数を何回も受信することになりますか?


> それとも一回だけread関数をじっこうすることによりできるのでしょうか?

知らんよそんなの。
少なくとも35msのうちに1024byte取り込まんならんのだけは確か。

相手側機器が用意できなくても
折り返しケーブルが用意できるなら、
「10秒ごとに190011Byte送信する」小さなアプリ作って
試せばいいやん。
    • good
    • 0

普通はシリアルポートの読み書きをする関数なら、データを受信してそれが受信バッファに書き込まれた時にイベントが発生するので、そのイベントの処理の中で受信バッファを読みに行くわけでしょ?バッファサイズが1KBだから、一度に読み込めるデータは最大でも1KBと言うことになり、欲しいデータの190011Byteに対してバッファの方が小さい、すなわち受信イベントの処理は何度も発生することになります。



イベントが発生した時、受信バッファに入っているデータ量は1KB以下の不定な量(受信処理が十分に早ければバッファの半分も行かないはず)であり、読み取り関数で読むと実際に読めた量を教えてくれるか、違う関数でバッファに入ってるデータ量を調べ、その分だけ読み取り関数で引っ張ってくるか、まあその辺でしょう。そうやって必要なデータを複数回に分けて読み込みます。

もし読み取りが間に合わないと受信バッファオーバーフローで例外が発生するから、その場合は相手方に再送要求を送るなり、後続のデータ列を読み捨て続けるなりして、次に備えます。オーバーフローが頻発するんだったら受信バッファを大きくするか、処理を見直すか…
    • good
    • 0

スレッドを起こし、そいつが受信に専念すれば。

この回答への補足

ご回答ありがとうございます

中の処理になりますが、
read関数を何回も受信することになりますか?
それとも一回だけread関数をじっこうすることによりできるのでしょうか?
ご回答お待ちしております

補足日時:2014/10/09 10:18
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています