2017-01-15 17 views
1

私はシリアルポート(Arduino)からデータを読み込み、フレーミング(数バイトで同期)しています。これを行うには、データを大きなバッファに読み込んでいます。 フレームを取得したら、データを抽出し、バイト配列とそのサイズを受け入れるserial.writeSerial.write(buf, len)を使用して別のシリアルポートに送信します。バイト配列の一部を送信する

データサイズがランダムになる可能性があるため、私は動的配列(Arduinoでは推奨されません)のようなものが必要です。何か案は?

+0

です。ビッグバッファーをポイントし、関連する部分を含む長さを使用して送信することができます。あなたがしないかもしれない唯一のことは、送信中にそのバッファの内容を変更することです。 – Matthias247

+0

まあ、動的サイズはお勧めしませんが、禁止されていません;)あなたが本当に必要な場合は使用するべきです(しかし、制限があることに気付いています)。しかし、ほとんどの場合、最大サイズの固定長配列を作成することで、動的サイズを置き換えることができます(たとえば、2〜16文字の文字列を送信できる場合は、16文字の配列を使用します)。しかし、この場合は、変更する必要がないので、複製せずに配列の一部を送信するだけです(dasblinkenlightの返信として) – frarugi87

答えて

3

データサイズがランダムにすることができますので、私は、関数に渡される配列は、彼らと彼らのサイズを携帯していないので、あなたはめったに、動的配列を必要としないCでは動的配列

ようなものが必要。そのため、配列をとるすべての関数も長さを取るのです。

bigBufferのデータがstartPosの位置にあり、lengthバイトを送信したいとします。あなたがやらなければならないことは、すでに大きな配列にそれを持っている場合は、なぜあなたはそれの関連部分を送信することはできません

Serial.write(&bigBuffer[startPos], length); 

またはポインタ算術演算の構文で

Serial.write(bigBuffer+startPos, length); 
+0

ありがとう!私は単純なソリューションが好きです:) – 1qazxsw2

+0

@ 1qazxsw2 'length = endPosition-startPosition'、そうですか? ( 'endPosition'がインクルーシブならば1を加えます)。 – dasblinkenlight

関連する問題