質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

1回答

2123閲覧

なぜ二回目以降の送信は必ず失敗するのか?

NEWBIEEBIEE

総合スコア62

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2017/01/22 03:41

編集2017/01/22 03:49

ラズベリーパイとUbuntuのラップトップの2回目以降の送受信処理がうまく行きません。
プログラムはUbuntu上でファイルを読み込み,ファイルを小分けのチャンクにして、ラズベリーパイに送信するプログラムです。
プログラムでの2端末間での送受信にはラップトップのtty/USB0とラズベリーパイのtty/AMA0を利用しています。
受信データが何故か2回目以降、チェックサムと一致しません。
なぜデータの送受信が2回め以降一致しないんでしょう?

Ubuntu側の(送信側)のログです。

log

1Baud rate is 1200 2device is: /dev/ttyUSB0 3Waiting for receiver ping ...Data buffer is sample2.jpg,32553 4loading from datachunk size: 0 5Data chunk include 0 :115 6check sum is 17709, and 17709 is calculated 7?Data buffer is ÿØÿà 8loading from datachunk size: 1024 9Data chunk include 0 :255 10Data chunk include 1 :216 11Data chunk include 2 :255 12Data chunk include 3 :224 13/* 以下続く */ 14 15/* 以上で終わり */ 16Data chunk include 2048 :44 17check sum is 35628, and 35628 is calculated 18 chunk include 2047 :116 19Data chunk include 2048 :66 20check sum is 50242, and 50242 is calculated

ラズベリーパイ上(受信側)のログです。

log

1Baud rate is 1200 2device is: /dev/ttyAMA0 3Send C ping.... 4STX is matched 5received STX collectlly 6MODEM IS YMODEM 7Block number is VALID. 8loading from datachunk size: 1024 9Data chunk include 0 :115 10Data chunk include 1 :97 11Data chunk include 2 :109 12Data chunk include 3 :112 13/* 以下続く */ 14 15/* 以上で終わり */ 16Data buffer is 17Checksum is invalid. 18Checksum is 35628 ,and 6190 is calculated 19Block number is zero(YMODEM) . 20

質問の詳細はファイルを読み込みチャンクとして小分けしてチェックサムを取ると
受信側のチェックサムと同じ値を示すのに,データはなぜかノイズでも入った状態になってしまっています。左が送信データ(Ubuntu)、右が受信後です(RaspberryPi)。
左が送信データ、右が受信後

一応のエラーの傾向としては3が0に変わってしまっているようです。

全体のコードhttps://codepaste.net/5d55sg

受信処理はメソッドxmodem_receiveです。
送信処理はメソッドxmodem_sendになります

一回目は成功するんです。でも二回目以降はなぜか失敗するのです。
ハードウェアの問題なら一回目も失敗するし・・・・
データが何故か違うのは何が問題なのんでしょう?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

改行コードが変換されてしまっている感じですね。
CRは0x0d(=13), LFは0x0A(=10)です。テキスト・モードでオープンしていると、この辺を自動変換するかも知れません。Windowsの場合はLFをCRLFへ変換します。
ラズパイがどうなのか把握していませんが、もしかして、LFをCRへ変換しているかも。

ファイルのオープン、および、通信デバイスのオープン時、バイナリ・モードでオープンするようにすると改善するかも知れません。

投稿2017/01/22 04:16

Chironian

総合スコア23272

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

NEWBIEEBIEE

2017/01/22 04:18

やっとわかりました。ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問