![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?8acaa2e)
Linuxでのシリアル通信についてですが、受信のときにデータがずれた状態で送られてくることがあります。
例えば、正常なデータが以下のような場合
rtc[0] = 7
rtc[1] = 83
rtc[2] = 0
rtc[3] = 4
rtc[4] = 5
略
たまに
rtc[0] = 0
rtc[1] = 7
rtc[2] = 83
rtc[3] = 0
rtc[4] = 4
略
rtc[0] = 0
rtc[1] = 0
rtc[2] = 7
rtc[3] = 83
rtc[4] = 0
略
rtc[0] = 83
rtc[1] = 0
rtc[2] = 4
rtc[3] = 5
rtc[4] = 0
略
といった結果になります。
プログラムでは、7バイト分読み込む場合は
unsigned char buff[7];
・
・
・
int r = read(fd, buff, 7);
と書いています。何か問題があるでしょうか。
宜しくお願いします。
No.1ベストアンサー
- 回答日時:
今時、シリアルポートの通信プログラムを書いている人がいるんですね、、懐かしいです。
データ化けしているわけでは無いのでビットレベルの同期はできているようです。
次に同期が必要になるのはブロック単位の同期ですが、これができていない状況です。
read() で読む際には期待する位置に格納(受信)されている保証はありません。
シリアル通信の場合は1バイトづつ読みながら目印になるバイト列が来たらそれからデータが始まると判断をする必要があります。
No.4
- 回答日時:
>int r = read(fd, buff, 7);
実行した時に受信バッファに5バイトしか入っていない場合にどういう挙動になるでしょう?
そして、貴方のコードはそういう場合にどういう挙動をするように記述しているでしょうか?
とりあえず、
man 2 read
してみるとか。
No.3
- 回答日時:
No.1 です。
曖昧性を排除します。
「Linuxでのシリアル通信」という言葉から無手順であることを前提に回答しています。
その場合、手順はプログラマに委ねられています。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- USBメモリー・SDカード・フラッシュメモリー 銀行が振込データの受け渡しに未だにFDを使っている理由は「FDDがAドライブ固定だから」って本当? 11 2022/06/02 03:53
- C言語・C++・C# TCP/IP通信時のサーバーからの受信 2 2022/11/23 09:11
- その他(データベース) 放送大学のデータベースの講義を、興味本位で見ていたら気になることがありました。 講師が、null を 5 2022/04/21 17:06
- HTML・CSS GETをPOSTに変更したところ 送信 不能です。 1 2022/04/10 17:31
- その他(SNS・コミュニケーションサービス) チャットアプリのダウンロードで個人情報流失することはないか 2 2023/07/28 02:53
- 写真・ビデオ チャットアプリのダウンロードで個人情報流失することはないか 2 2023/07/28 00:46
- UNIX・Linux Zabbix監視エージェントをインストールしてもデータを収集できずアクティブにならない 1 2023/02/26 20:25
- Wi-Fi・無線LAN iPhoneを一日中家のWi-Fiに接続して使ったのですが、データ通信を少し(0.05GB)使ってい 3 2023/07/03 21:39
- その他(SNS・コミュニケーションサービス) チャットアプリのダウンロードで個人情報流失することはないか 2 2023/07/28 11:41
- 事件・犯罪 酒酔い運転検挙 1 2022/04/20 22:22
このQ&Aを見た人はこんなQ&Aも見ています
-
性格の違いは生まれた順番で決まる?長男長女・中間子・末っ子・一人っ子の性格の傾向
同じ環境で生まれ育っても、生まれ順で性格は違うものなのだろうか。家庭教育研究家の田宮由美さんに教えてもらった。
-
シリアル通信でのread関数の戻り値
C言語・C++・C#
-
C# シリアル通信でデータ受信時の欠損について
C言語・C++・C#
-
シリアル通信でのデータ受信
C言語・C++・C#
-
-
4
シリアルの送信完了を待つ方法
UNIX・Linux
-
5
高速シリアル通信での大容量のデータ転送について(mscomm)
Visual Basic(VBA)
-
6
<unistd.h>をVisualStudioでつかえるようにする
C言語・C++・C#
-
7
RS232cを用いた送信プログラム
C言語・C++・C#
-
8
LINUX上でシリアル通信(C++)
C言語・C++・C#
-
9
シリアル通信 大きいサイズの受信処理
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
MSCommでoutputできない
-
ソケット通信内 read関数について
-
シリアル通信の出力バッファと...
-
Connection reset by peer
-
Macターミナルで実行中のプログ...
-
タスクマネージャーのプロセス...
-
C言語で、メモリを解放しないで...
-
explorer.exeが異様にメモリを食う
-
家電製品の電力周波数を変える機械
-
メモリアロケーション異常の発...
-
VBA kernel32 の意味
-
C++からCへのソース変換について
-
ストール監視の監視方法
-
C++でCtrl+Cを無効化したい
-
非表示になったエクセルは?
-
Mac 乗数の入力方法
-
指定したフォルダーを最前面表...
-
Excel VBA データ削除の高速化
-
はしごの高をマックで表示する...
-
プログラム初心者です Pythonで...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C# シリアル通信でデータ受信...
-
winsockでソケット通信の開発を...
-
socket: recvはいつ,どれだけ...
-
SocketのSend関数でのCLOSEの検...
-
シリアル通信の出力バッファと...
-
RS232C通信(PC⇔PLC)
-
WriteFile()でのデータ送信がで...
-
シリアルポート通信
-
ソケット通信内 read関数について
-
Linuxでのシリアル通信について...
-
SerialPortのDataReceivedイベ...
-
「スイッチングハブのバッファ...
-
RS-232Cでバイナリデータを受信...
-
Connection reset by peer
-
UDP処理のエラーについて
-
VB2005でWin32APIを用いてRS-23...
-
シリアル通信エラー
-
winsockの動作について。
-
シリアル通信 大きいサイズの...
-
VB2010 シリアル受信した情報を...
おすすめ情報