2016-06-19 22 views
0

私はPROGMEMに複数の2D配列を持っています。2D PROGMEMアレイのPROGMEMアレイの作成方法

私はそれらを別の配列に格納したいので、2次元PROGMEM配列のPROGMEM配列が必要です。

次に、データを読みたいと思います。私はこれを行うことになっていますどのように

error: cannot convert 'const byte (*)[2] {aka const 
unsigned char (*)[2]}' to 'const byte* const {aka const 
unsigned char* const}' in initialization 

:ここ

は私が

void myFunc() 
{ 
    const static byte DATA1[3][2] PROGMEM = 
    { 
    -1, 6, 
    -3, 6, 
    -5, 5 
    }; 
    const static byte DATA2[3][2] PROGMEM = 
    { 
    1, 0, 
    1, 0, 
    1, 0 
    }; 
    const static byte DATA3[6][2] PROGMEM = 
    { 
    0, 1, 
    1, 3, 
    2, 4, 
    4, 4, 
    6, 3, 
    7, 1 
    }; 
    //PROGMEM array of 2d arrays in PROGMEM 
    const static byte* const MY_DATA[] PROGMEM = {DATA1, DATA2, DATA3}; 

    //read out the data now: 
    byte myData = pgm_read_byte(&((MY_DATA[arrayNum])[x][y])); 

    //use the data here, etc, etc... 
} 

私のエラーをされて持っているものは?私は周りを読んでいて、一時間以上これを理解しようとしています。私は何が間違っているのか分からない。

参考文献ページ:

  1. http://www.nongnu.org/avr-libc/user-manual/pgmspace.html
  2. http://www.nongnu.org/avr-libc/user-manual/group__avr__pgmspace.html#ga963f816fc88a5d8479c285ed4c630229
  3. https://www.arduino.cc/en/Reference/PROGMEM
+0

なぜdownvote? –

+1

正しいタイプを先に試してみてください。 'const static byte(* const MY_DATA [])[2] PROGMEM = {DATA1、DATA2、DATA3};' – MikeCAT

+0

それでした。ありがとう!申し訳ありませんが、私はそれを正確に理解していないと言わなければなりません。答えを出して詳細に説明できますか? –

答えて

1

MY_DATAの要素のタイプは、AS const byte (*)[2]に変換さ等const byte* constが、DATA1、ありますエラーメッセージが示唆するので、型の不一致が起こります。式の配列は、単項演算子&またはsizeofのようないくつかの例外を除いて、最初の要素を指すポインターに自動的に変換されることに注意してください。

使用正しいタイプ:このようconst byte (*)[2]へのポインタの配列:

const static byte(* const MY_DATA[])[2] PROGMEM = {DATA1, DATA2, DATA3}; 

これは「CONSTバイトのアレイ2へのconstポインタの配列として静的変数MY_DATA」です。

cdeclによれば、const char(* const MY_DATA[99])[2];は、「const charの配列2へのconstポインタの配列99としてのMY_DATA」としてデコードすることができる。いくつかの変更を加えれば、正しいタイプの実装を得ることができます。

constのない型宣言は、正規表現評価の逆順にデコードできます。 (申し訳ありませんが、現在私は修飾子をデコードできません)このメソッドではbyte(*MY_DATA[])[2]をデコードしてみましょう。

通常の式の評価:

  1. MY_DATA
  2. MY_DATA[]MY_DATA
  3. *MY_DATA[]のいくつかの要素:

デコード逆参照されているもののいくつかの要素:要素

  • (*MY_DATA[])[2]間接参照型宣言(@によってまだ表されている復号されないもの):

    1. byte @:何かを有するタイプbyte
    2. byte @[2]byte
    3. のポインタ2の要素への配列:2-素子アレイ byte
    4. byte (*@)[2]
    5. byte (*@[])[2]:2要素配列へのポインタの配列byte
    6. byte (*MY_DATA[])[2]MY_DATAは、2要素配列へのポインタの配列ですbyte