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も見ています
-
プロが教える店舗&オフィスのセキュリティ対策術
中・小規模の店舗やオフィスのセキュリティセキュリティ対策について、プロにどう対策すべきか 何を注意すべきかを教えていただきました!
-
C# シリアル通信でデータ受信時の欠損について
C言語・C++・C#
-
シリアル通信でのread関数の戻り値
C言語・C++・C#
-
シリアル通信でのデータ受信
C言語・C++・C#
-
-
4
シリアルの送信完了を待つ方法
UNIX・Linux
-
5
LINUX上でシリアル通信(C++)
C言語・C++・C#
-
6
シリアル通信プログラム(受信)について
C言語・C++・C#
-
7
高速シリアル通信での大容量のデータ転送について(mscomm)
Visual Basic(VBA)
-
8
RS232cを用いた送信プログラム
C言語・C++・C#
-
9
シリアル通信でのデータ取りこぼし
Visual Basic(VBA)
-
10
シリアル通信でのデータ分け
C言語・C++・C#
-
11
シリアル通信 大きいサイズの受信処理
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C# シリアル通信でデータ受信...
-
UDP処理のエラーについて
-
シリアルポート通信
-
exeファイルのセキュリティ。
-
RS232C通信(PC⇔PLC)
-
socket: recvはいつ,どれだけ...
-
visual c# 2010 シリアル通信ア...
-
ftplibのエラー処理
-
COMポートの同時オープン同時読...
-
「スイッチングハブのバッファ...
-
シリアル通信の出力バッファと...
-
TCP/IP通信プログラミングにお...
-
SocketのSend関数でのCLOSEの検...
-
recv関数の受信結果について
-
winsockでソケット通信の開発を...
-
Linuxでのシリアル通信について...
-
Connection reset by peer
-
setsockoptのタイムアウト確認...
-
rs232cでの受信データ(mscomm)...
-
SerialPortのDataReceivedイベ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C# シリアル通信でデータ受信...
-
WriteFile()でのデータ送信がで...
-
winsockでソケット通信の開発を...
-
「スイッチングハブのバッファ...
-
socket: recvはいつ,どれだけ...
-
シリアル通信の出力バッファと...
-
Connection reset by peer
-
RS232C通信(PC⇔PLC)
-
RS-232Cでバイナリデータを受信...
-
WaitForMultipleObjects関数の...
-
Linuxでのシリアル通信について...
-
rs232cでの受信データ(mscomm)...
-
UDP処理のエラーについて
-
SocketのSend関数でのCLOSEの検...
-
ソケット通信内 read関数について
-
recv関数の受信結果について
-
シリアルポート通信
-
MSCommでoutputできない
-
SerialPortのDataReceivedイベ...
-
VB2005でWin32APIを用いてRS-23...
おすすめ情報