1

我有几个 const int 二维数组全局存储在 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}
}

我想在一个函数中读出这个二维图像数组。应在参数中指定要读取的图像。

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

我对指针等的使用不是很熟悉,但我知道这是这样做的方法。你能告诉我如何让它工作吗?

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

pgm_read_byte(&image1[i][j])

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

4

1 回答 1

0

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

pgm_read_byte(&image[i][j])

或者

pgm_read_byte(image[i] + j)

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

于 2015-02-21T12:42:25.630 回答