Простой пример из статьи "РАБОТА С PROGMEM ПАМЯТЬЮ", раздел "Массив массивов", немного доработан. Выдаёт в порт некорректные данные.
Выдаёт:
170
0-148
1-224
2-148
3-67
Должно быть:
170
0-20
1-70
2-120
3-170
Если вместо х указывать число, всё работает нормально.
C++:
int x;
// массивы
const uint8_t data0[] PROGMEM = {10, 20, 30, 40, 50};
const uint8_t data1[] PROGMEM = {60, 70, 80, 90, 100};
const uint8_t data2[] PROGMEM = {110, 120, 130, 140, 150};
const uint8_t data3[] PROGMEM = {160, 170, 180, 190, 200};
// таблица ссылок
const uint8_t* const data_array[] PROGMEM = {data0, data1, data2, data3};
void setup() {
Serial.begin(9600);
// выведет 170, второй элемент четвёртого массива
Serial.println(pgm_read_byte(&data_array[3][1]));
}
void loop() {
if (x < 4) {
Serial.print(x);
Serial.print('-');
Serial.println(pgm_read_byte(&data_array[x][1]));
x++;
}
}
170
0-148
1-224
2-148
3-67
Должно быть:
170
0-20
1-70
2-120
3-170
Если вместо х указывать число, всё работает нормально.