如何制作二维 PROGMEM 阵列的 PROGMEM 阵列

How to make PROGMEM array of 2D PROGMEM arrays

我在 PROGMEM 中有几个二维数组。

我想将它们存储到另一个数组中,因此有一个 2d PROGMEM 数组的 PROGMEM 数组。

那我要把数据读出来

这是我的

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...
}

我的错误是:

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

我该怎么做?一个多小时以来,我一直在四处阅读并试图弄清楚这一点。我不知道我做错了什么。

有用的参考页面:

  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

MY_DATA的元素类型是const byte* const,但是DATA1等按照错误提示被转换为const byte (*)[2],所以类型不匹配。请注意,表达式中的数组会自动转换为指向其第一个元素的指针,但某些例外情况除外,例如一元运算符 &sizeof.

使用正确的类型:指向 const byte (*)[2] 的指针数组,如下所示:

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

这是"static variable MY_DATA as array of const pointer to array 2 of const byte"。

根据cdeclconst char(* const MY_DATA[99])[2];可以解码为"MY_DATA as array 99 of const pointer to array 2 of const char"。通过一些修改,您可以获得正确类型的实现。

您可以在没有 const 的情况下以与正常表达式评估相反的顺序解码类型声明。 (对不起,目前我不擅长解码限定符)让我用这种方法解码byte(*MY_DATA[])[2]

普通表达式求值:

  1. MY_DATA
  2. MY_DATA[] : MY_DATA
  3. 的一些元素
  4. *MY_DATA[] : 取消引用元素
  5. (*MY_DATA[])[2] : 取消引用的某些元素

解码类型声明(尚未解码的内容用@表示):

  1. byte @ : 类型为 byte
  2. 的东西
  3. byte @[2]byte
  4. 的 2 元素数组
  5. byte (*@)[2] :指向 byte
  6. 的 2 元素数组的指针
  7. byte (*@[])[2] :指向 byte
  8. 的 2 元素数组的指针数组
  9. byte (*MY_DATA[])[2] : MY_DATA,这是指向 byte
  10. 的 2 元素数组的指针数组