2012-04-03 8 views
41

私はArduinoに "waypoints"のベクトルを作っています。各ウェイポイントはオブジェクトです。 Arduinoは、明らかにウェイポイントのナビゲーションに複数のウェイポイントを格納する必要があります。しかし、標準的なプログラムされた配列にこれらのウェイポイントを保存する代わりに、ユーザーはウェイポイントを追加したり、ウェイポイントを削除したり、移動する必要があります。残念ながら、Arduinoはビルトインライブラリとしてベクトル型を提供していません。Arduinoのベクトル

が、私は現在、2つのオプションを検討しています:

  1. Container for objects like C++ 'vector'?では、誰かが汎用ライブラリを掲載しました。索引の削除や移動操作は含まれません。しかし、それはいくつかのメモリ管理戦略を含んでいます。

  2. 私は過去にmalloc、deallocを、callocを使用していました。しかし、私はその選択肢がまったく嫌いです。しかし、これは私のシナリオではより良い選択ですか?

どちらが良いでしょうか?

+3

こちらをご覧ください:http://andybrown.me.uk/ws/2011/01/15/the-standard-template-library-stl-for-avr-with-c-streams/ – paulsm4

答えて

48

Standard C++ for Arduinoはオプションです。 ArduinoではSTLvectorを使用できます。

+0

ワウそのライブラリセットはかなり印象的です。それを見つけてくれてありがとう! – jakebird451

+6

脇に、使用しているArduinoのタイプについて言及することは非常に役に立ちます。メガ2560で動作するソリューションは、小規模で古いArduinosでは動作しません。 単なる提案です。無視してもかまいません:) –

+2

このライブラリはすばらしいです。 – PixMach

1

arduinoにはメモリが限られているので、いくつのウェイポイントを許可するかを知る必要があります。この場合、割り当てられたウェイポイントのメモリポインタ(アドレス)を保持する単純な配列が必要なシーケンス/順序を提供します。 1つのアレイスロットをワーキングエリアから解放しておくと、ウェイポイントを移動(並べ替え)することができます。

4

単純なリンクリストを実装したいと思うように聞こえます。リンクリストを使用すると、C++ベクタに関連するオーバーヘッドなしにオブジェクト(ウェイポイント、場合によっては)を移動することができます。

ここに実装on GitHubがあります。

+0

Githubの上部であなたの例をよく理解していません。任意のサンプルコードと期待される結果、la php.netスタイルを表示できますか? –

+0

このリンクは質問に答えるかもしれませんが、回答の重要な部分をここに含めて参考にしてください。リンクされたページが変更された場合、リンクのみの回答は無効になります。 - [レビューから](/レビュー/低品質の投稿/ 18589237) – kritzikratzi

0

また、ウェイポイントが使用されているかどうかにかかわらず、ウェイポイント構造の固定配列を持ち、構造に変数を含めることもできます。ウェイポイントを追加するときは、使用していない構造が見つかるまで、配列全体をループする必要があります。