C ++ / Arduino将指针传递给存储在PROGMEM中的2D数组

时间:2015-02-21 12:40:52

标签: c++ arrays pointers 2d progmem

我有几个const int 2D数组全局存储在PROGMEM中。例如:

const int image1[][17]PROGMEM = {
  {1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0},
  {1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0},
  {1,1,1,0,0,0,0,0,1,1,1,1,0,0,0,0,0},
  {1,1,1,0,0,0,1,1,1,1,1,1,1,1,0,0,0},
  {1,1,1,0,0,0,1,1,1,0,0,1,1,1,1,0,0}
}

我想在函数中读出这个2d图像数组。应在参数中指定要读出的图像。

void printImage(image)
{
  // do something with element i,j of image
  pgm_read_byte(image[i][j])
}

我对指针等的使用并不十分了解,但我知道这是做到这一点的方法。你能告诉我如何让它发挥作用吗?

EDIT1: 我现在怎么做(它有效,但不优雅);我有没有任何参数的函数printImage1(),在我使用的body函数中:

pgm_read_byte(&image1[i][j])

读出image1。 对于image2,image3等我复制了printImage1函数并将imgage1从上面改为image2,image3等。这是多余的编程,这就是为什么我只想使用一个函数printImage来指定参数中的图像。

1 个答案:

答案 0 :(得分:0)

pgm_read_byte获取您要读取的字节的地址。你可以用

pgm_read_byte(&image[i][j])

pgm_read_byte(image[i] + j)

但请注意,在pgm_read_byte的数组(在AVR上为2字节宽)上使用int是不常见的。您应该将image1设为uint8_t的二维数组或使用pgm_read_word