2016-10-17 8 views
1

バイト配列の一部を2つの別々のバイト配列に割り当てて、別々のシリアルポート上でシリアルコマンドとして送信しようとすると、私はいくつかの奇妙な動作をします。私はより簡単に歩くことができるようにコードを分割しました。問題は簡単に繰り返すことができますが、私には意味がありません。不整合に割り当てられたバイト

byte[] cmd1 = CLEAR_COMMAND; 
byte[] cmd2 = CLEAR_COMMAND; 

byte[] parameterBytesCmd1 = IntToByteArray(parameter1); 
cmd1[3] = parameterBytesCmd1 [0]; 
cmd1[4] = parameterBytesCmd1 [1]; 

Thread.Sleep (100); 

byte[] parameterBytesCmd2 = IntToByteArray(parameter2); 
cmd2[3] = parameterBytesCmd2 [0]; 
cmd2[4] = parameterBytesCmd2 [1]; 

あなたは私が構築したコマンドテンプレート内の特定の位置にそれらを入れて、その後、バイト配列に変換し、整数パラメータのカップルを取っています見ることができます。私は、少なくとも100msの間に、間に寝せずにこれを行う場合は、cmd1cmd2の内容は毎回同じになります - cmd1cmd2の両方のための[3][4]parameterBytesCmd1[0][1]からのデータが含まれています。

FWIW、これは別のスレッドで発生します。

答えて

5

あなたの問題は、おそらくあなたがcmd1cmd2の両方にCLEAR_COMMANDという名前の配列をコピーし、その内容を変更している

byte[] cmd1 = CLEAR_COMMAND; 
byte[] cmd2 = CLEAR_COMMAND; 

から来ています。 cmd1とcmd2は元のレコードを変更せず、相互に作用しないように、配列のコピーを作成して変数に代入する必要があります。

ファイルの先頭にusing System.Linq;を追加する場合は、以下の操作を行ってアレイの浅いコピーを作成する必要があります。あなたはCMD1とCMD2は、メモリ内の同じ配列を指すようにしたい場合によっては、どちらか

byte[] cmd1 = CLEAR_COMMAND.ToArray(); 
byte[] cmd2 = CLEAR_COMMAND.ToArray(); 

または

byte[] cmd1 = CLEAR_COMMAND.ToArray(); 
byte[] cmd2 = cmd1; 
を行うことになるでしょう
関連する問題