Почему, когда я извлекаю индекс 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, почему это происходит так неправильно?
@luke cross, 👍0
1 ответ
Лучший ответ:
▲ 1
Ваш массив находится в PROGMEM, но вы обращаетесь к нему, как если бы он был в оперативной памяти.
Вы должны использовать pgm_read_word()
для доступа к данным в вашем массиве.
pgm_read_word(&(colorTheme[EEPROM.read(x)]))
Кстати, какая плата Arduino имеет более 2 КБ EEPROM?
,
@Majenko
Смотрите также:
- Ошибка: invalid application of 'sizeof' to incomplete type 'int []' при попытке вычислить размер массива в библиотеке
- Объявление и использование массива структур в Arduino
- Поддерживает ли Arduino C++ динамические массивы объектов ?
- Почему структура переменного размера не компилируется в Arduino IDE?
- Получена ошибка недопустимого преобразования из 'const char*' в 'const uint8_t*
- Как масштабировать растровое изображение (массив uint8_t) в Arduino?
- Удалить все элементы из массива
- Как я могу присвоить значение массива символов массиву uint8_t?
Спасибо, я использую Atmega2560, он https://store.arduino.cc/usa/mega-2560-r3, у вас EEPROM 4кб, @luke cross