【发布时间】:2016-09-25 10:04:39
【问题描述】:
我有许多不同大小的数组存储在闪存中。 我可以使用
访问单个数组条目byte j = pgm_read_byte(&(array[x]));
我想要做的是将闪存中的数组作为参数传递给函数。我尝试将指向数组的指针作为参数提供,但这会产生编译错误:
void callPGM2(byte arr_size, byte *arr) {
..
..
}
ptr2 = &pgm_read_byte(&(array_1[0]));
callPGM2(5, &ptr2);
可以将完整的数组作为函数参数从闪存传递吗?
【问题讨论】:
-
无论
pgm_read_byte函数返回什么,它都不能用作指针。如果它返回一个int(如第一个代码sn-p所示),那么为什么要将它作为字节数组传递给callPGM2函数? -
此外,在 C(以及 C++)中,数组自然衰减指向指向它们的第一个元素的指针。如果需要
byte *,并且您有一个byte数组,那么按原样传递数组将与例如传递数组一样好。&array[0]. -
pgm_read_byte 是 avr/pgmspace 库中的一个函数。上面的代码 sn-p 我犯了一个错误,我认为它返回字节。
-
将数组传递给函数的原因是函数可以执行操作并将数组中定义的值通过i2c写入辅助设备
-
我认为您可以使用
pointer to PROGMEM作为函数参数,但不要将其与非 PROGMEM 指针混合使用。你介意在真实硬件中测试this,因为我现在没有它。如果这不是你的意思,请忽略我的评论。