C++/Arduino将指针传递到存储在PROGMEM中的2D数组
C++/Arduino Passing pointer to 2D array stored in 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}
}
我想在函数中读出这个二维图像阵列。应在参数中指定要读取的图像。
void printImage(image)
{
// do something with element i,j of image
pgm_read_byte(image[i][j])
}
我对指针等的使用不太熟悉,但我知道这就是方法。你能告诉我如何使它工作吗?
第1版:我现在是怎么做的(它有效,但并不优雅);我有一个没有任何参数的函数printImage1(),在body函数中我使用:
pgm_read_byte(&image1[i][j])
以读出图像1。对于image2、image3等,我复制函数printImage1,并将imgage1从上面更改为image2、image 3等。这是多余的编程,这就是为什么我只想使用一个函数printImage在argument中指定图像。
pgm_read_byte
获取要读取的字节的地址。你可以使用
pgm_read_byte(&image[i][j])
或
pgm_read_byte(image[i] + j)
然而,请注意,在int
的数组上使用pgm_read_byte
是不寻常的(在AVR上为2字节宽)。您可能应该将image1
设为uint8_t
的2D阵列,或者使用pgm_read_word
。
相关文章:
- 将字符串存储在c++中的稳定内存中
- std::原子加载和存储都需要吗
- C++:将控制台输出存储在宏中更好吗
- 使用QProcess执行命令,并将结果存储在QStringList中
- 访问存储在向量C++中的结构的多态成员
- 如何从存储在std::映射中的std::集中删除元素
- 存储模板类型以强制转换回派生<T>
- 类型总是使用其大小存储在内存中吗
- 当字符串存储在变量中时,如何将字符串转换为wchar_t
- 使用无符号字符数组有效存储内存
- 如何在cpp.中使用协议缓冲区存储大缓冲区/数组(char/int)
- 使用 pqxx 将 std::vector 存储在 postgresql 中,并从数据库中检索它
- 带结构的二维矢量:如何存储元素
- 添加存储在向量中的大整数的函数出现问题
- 从文件中读取多个字节,并将它们存储在C++中进行比较
- 在std::vector上存储带有模板的类实例
- 谷歌测试中的期望值存储在哪里
- 如何在AVR(例如:ATMega)或Arduino微控制器上制作2D PROGMEM阵列的1D PROGMEM数组(存储
- C++/Arduino将指向PROGMEM中存储的2D数组的指针传递给函数
- C++/Arduino将指针传递到存储在PROGMEM中的2D数组