Linux のシリアル ポートからデータを読み取るプログラムを作成しています。データは、次のフレーム形式で別のデバイスから送信されます。
|start | Command | Data | CRC | End |
|0x02 | 0x41 | (0-127 octets) | | 0x03|
----------------------------------------------------
Data フィールドには、示されているように 127 オクテットが含まれており、オクテット 1,2 には 1 つのタイプのデータが含まれています。オクテット 3,4 には別のデータが含まれています。これらのデータを取得する必要があります。
Cでは、1 バイトは 1 文字しか保持できず、フレームの開始フィールドでは、3 文字の STX を意味する 0x02 であるためです。
だから、私のプログラムをテストするために、
送信側では、上記のようにフォーマットされたフレームとして配列を作成します。
char frame[254];
frame[0] = 0x02; // starting field
frame[1] = 0x41; // command field which is character 'A'
..so on..
そして、受信側では、次のようなフィールドを取り出します。
char 結果[254]; // データを読む 読み取り (結果); printf("コマンド = %c", 結果[1]); // フレームのコマンド フィールドを取得します // 他のフィールドの値を取得
コマンド フィールドの値 (result[1]) が文字「A」ではありません。
これは、フレームの最初のフィールド値が 0x02 (STX) であり、配列フレームの最初の 3 つの場所を占め、受信側で間違った結果をもたらすためだと思います。
どうすれば問題を解決できますか、または送信者側で何か間違ったことをしていますか?
関連する質問:
C でデータ フレームを解析して読み取りますか?
CのLinuxのシリアルポートでデータをクリアしますか?