2016-11-25 7 views
0

私のラップトップと私のモジュールとの間で通信したい。そのためには、UARTにいくつかのパケットを送信するPythonファイルを作成します。 Iがパケットを作成するPythonスクリプト(ラップトップ)を有する:最初の2つの数字の読み方は? python + UART

SOF= '24' 
SEND_PLAINTEXT= '72' 
SEND_KEY ='73' 
RECEIVE_CIPHERTEXT='74' 
SIZE_OF_FRAME= '10' 
for a in range (0,1): 

    line_array=lines[a] 
    plaintxt_16b=line_array[0:32] 
    plaintext= '24'+'72'+'32'+plaintxt_16b 
    ser.write (plaintext.encode()) 

最後のパケットが247232ccddeeff8899aabb4455667700112233

UARTは、Cのコードの次の行を使用してパケットを読み出し:

uint8_t rx_buffer[38]; 
int rx_length = dev_uart_ptr->uart_read(rx_buffer, 38); 

if (rx_length <38) 
{ 
    printf(rx_buffer); 
} 

それがフレームの開始かどうかをテストするために、最初の2つの数字だけを読む必要があります。このように、私は自分のコードを変更しました:

uint8_t rx_buffer[2]; 
int rx_length = dev_uart_ptr->uart_read(rx_buffer,2); 

if (rx_length <2) 
{ 
    printf(rx_buffer); 
} 

問題は、私は24を読みたいにもかかわらず、あなたは私を助けることができれば、私は非常に感謝される、表示される数字は33であるということです。

+0

uart_read()関数の機能は何ですか?このタスクを実行するためにインポートするライブラリはどれですか? – Jalo

+0

UARTから読み取ることができます。 – tssmokey46

+0

あなたの投稿は非常に混乱しています。最初はPythonコードだと思っていましたが、それはC/C++コードのようです。あなたはチャンネルの反対側でそれを実行していますか?もしそうなら、あなたはポストのラベルを変更し、C/C++に設定してください。これはPythonの質問ではありません。 – Jalo

答えて

2

この行plaintext= '24'+'72'+'32'+plaintxt_16bは、右から左に実行されているようです。だから、バッファーの最初のものはplaintxt_16bになり、残りは残りの部分になります。

バイトの順番も、パケット247232ccddeeff8899aabb4455667700112233の右から左です。だから、最初のバイト(0のインデックス)は0x33

18.| 17.| 16.| 15.| 14.| 13.| 12.| 11.| 10.| 9. | 8. | 7. | 6. | 5. | 4. | 3. | 2. | 1. | 0. 
--------------------------------------------------------------------------------------------- 
24 | 72 | 32 | cc | dd | ee | ff | 88 | 99 | aa | bb | 44 | 55 | 66 | 77 | 00 | 11 | 22 | 33 

次のことを試してみてくださいされています

plaintext= plaintxt_16b + '32' + '72' + '24' 

と同じUARTのコードを残します。

+0

あなたは私のupvoteを持っています;) – Jalo

+0

@Bence Kaulis、あなたの答えは私に正しい解決策を与えますが、私はどのように16進形式をCで使用することはできません。私のために説明できますか? – tssmokey46

+0

@ tssmokey46 1つの問題/質問をしてください。解決したら、次の問題に移動しないでください。あなたの次の問題のために新しい質問を開き、これを参照してください。だから、新しい質問を投稿して、Cで16進値を使って何をしたいのかを精巧に説明してください。ヒント: 'if(rx_buffer [0] == 0x24)'だけを比較したい場合。 –

1

UARTのエンディアンをチェックするように提案できます。

私はあなたが最初の2トークンではなく、最後の2トークンを読む必要があると思います。

EDIT:

は、私の知る限り理解し、自分のUARTモジュールは、あなたのパケットの終わりから開始することで、データを送信しています。したがって、最初の2つの数字を読み取ろうとすると、33が得られますが、最後の2つの数字を読み取って24を取得する必要があります。

チェックthis

@Jaloがここに完全な答えのために多くを主張しているので、それは行く:

私は前述したように、あなたは最後の2つの数値を読み取る必要があります。 plaintext= '24'+'72'+'32'+plaintxt_16bplaintext = plaintxt_16b + '32' + '72' + '24'に変更してください。

+0

私は理解していない、あなたは鉱石の説明を与えることができますか? – tssmokey46

+0

@ tssmokey46 https://en.wikipedia.org/wiki/Endianness –

+0

アドバイスではなく完全な答えを追加 – Jalo

関連する問題