Почему, когда я извлекаю индекс EEPROM, возвращаемое значение является мусором?

У меня есть набор цветов для моего tft-экрана:

const uint16_t colorTheme [] PROGMEM = {BLACK, WHITE, NAVY, CYAN, RED, GREEN, VERDEAQ, PINK, ORANGE, PURPLE, GRAY, YELLOW};

Когда я пытаюсь использовать colorTheme [EEPROM.read (2500)], мне возвращается значение какой-то фигни или значение 0, и я проверил его в read_eeprom и значение EEPROM.read (2500) равно 4, а 4 в моем векторе — это голубой цвет, а не черный или число 0, почему это происходит так неправильно?

, 👍0


1 ответ


Лучший ответ:

1

Ваш массив находится в PROGMEM, но вы обращаетесь к нему, как если бы он был в оперативной памяти.

Вы должны использовать pgm_read_word() для доступа к данным в вашем массиве.

pgm_read_word(&(colorTheme[EEPROM.read(x)]))

Кстати, какая плата Arduino имеет более 2 КБ EEPROM?

,

Спасибо, я использую Atmega2560, он https://store.arduino.cc/usa/mega-2560-r3, у вас EEPROM 4кб, @luke cross