-1

シリアル経由で Arduino の配列をコンピューターに送信しようとしています。ただし、配列を受け取るたびに、明らかにランダムで、時には秒単位で変化するデータが含まれています。これにより、ポインタを間違って参照したのではないかと疑われますが、構文の問題は見つかりません。

配列は buildreport() によって生成され、配列の最初の要素に boolean* を返します。それは loop() によって取り上げられ、シリアルラインに書き込まれます。

//read pins
boolean report[NUM_BUTTONS] = {0,0,0,0,0,0,0,0,0}; //I set this to all zeroes for testing and brevity
boolean* x = &report[0];
return x;

そしてループ()

//if I don't read the serial, it will always be 
//available and execute forever.

if(Serial.available() != 0){ 
 incoming = Serial.read();
 boolean* reports = buildreport();
 //reports should now be the first element of the array
 for(int i=0;i<NUM_BUTTONS;i++){
   boolean x = *(reports+i);
   //x is set to value at reports[0] plus i

   Serial.write(x);

 } 
 Serial.write(0x0d); //carriage return
 Serial.write(0x0a); //line feed
}

シリアル ラインに何かを送信して配列を要求するたびに、1 か 0 ではない 9 バイトが返されます。場合によっては、最初のバイトが変わることがあります。

4

1 に答える 1

1

reportは自動保存期間の配列であるため、関数が戻ると破棄されます。それを (最初の要素へのポインターを介して) 使用するとx、未定義の動作が呼び出されます。

関数で配列を作成する場合は、動的メモリ割り当て (malloc()およびその仲間によって達成) を使用するか、関数の引数として配列を渡し、関数に適切な値を入力させる必要があります。

于 2013-08-05T22:58:33.500 に答える