2016-03-26 8 views
-1

私は現在、crazyflie 2.0無人機ファームウェアを研究中です。無人機を知らない人のために、ここにウェブサイトへのリンクがあります:https://www.bitcraze.io/crazyflie-2/ これはオープンソースプロジェクトです。配列をCで配列する

とにかく、私は、ファームウェアコードの一部を理解しています。実際には非常に単純なことかもしれませんが、私はC.

struct CommanderCrtpValues 
{ 
    float roll; 
    float pitch; 
    float yaw; 
    uint16_t thrust; 
} __attribute__((packed)); 

static struct CommanderCrtpValues targetVal[2]; 

でのプログラミングに非常に新しいですあなたはでコードのこの部分を見つけることができます:https://github.com/bitcraze crazyflie-ファームウェア/モジュール/ SRC/commander.c

私は最後の行を理解していません。私はtargetValという名前のArrayに構造体を代入していると思いますが、わかりません。本当に何が起こっているのか説明できますか?

+3

これは配列です。これは2つの要素を含み、各要素はそのすぐ上に表示される型の構造体です。 – enhzflep

答えて

3

これは2つのCommanderCrtpValues構造体の静的配列を作成しています。

これはグローバルスコープで宣言されているため、プログラムの開始時にメモリは0(つまり、すべてのフィールドの値が0)に初期化されます。Why are global variables always initialized to '0', but not local variables?を参照してください。私はこの詳細がこの特定のケースでは重要だとは思わないが、ファームウェアの他の場所で使用されている。

(免責事項:私はこのコードの著者です)

+0

ようこそスタックオーバーフロー!新しいメンバーとして、基本的なことを理解するための短い紹介[ツアー]を読んでみてください。私はいくつかの小さな点を編集する自由を取った - 答えは自分自身に立つことができると考えられています。他人の投稿を参照するのが便利な場合もありますが、この場合は必要ないようです。私もコメントについての発言を削除しました。 – usr2564301

+0

ありがとうございます! – henry

0

このコードでは、4つのフィールド(ロール、ピッチ、ヨー、推力)を持つCommanderCrtpValuesという名前の構造体が定義されています。

最後の行は、2つの要素の配列であるtargetValという名前の変数を定義しています。各配列要素は、CommanderCrtpValuesの構造体です。

変数targetValはまだ初期化されていないため、各要素の実際の内容は未定義です。 CommanderCrtpValues構造体であることがわかっていても、フィールドに含まれる値がわからないことがあります。

+0

このような明確な説明をいただきありがとうございます! – henry