Могут ли типы данных, сохраненные в PROGMEM, быть позже изменены в программе?

Здравствуйте, я делаю игру на Arduino, но мне нужно хранить 2 глобальные переменные, которые отслеживают счет currScor и hiScor обоих типов uint32_t и чтобы сэкономить место оперативной памяти, я отметил их как uint32_t currScor PROGMEM = 0; как только игра начнется, счет начнет увеличиваться, но компилятор говорит, что я не могу присвоить постоянную переменную. Есть ли способ, которым я могу добавить к этой переменной, которая хранится во флэш-памяти? Должен ли я рассмотреть использование EEPROM, хотя я беспокоюсь, что слишком много записей сожжет этот тип памяти.

3 ответа

Arduino имеет 4 типа памяти:

  1. вспышка
  2. EEPROM
  3. SRAM
  4. Регистры процессора

Управление Flash и EEPROM невозможно при простых назначениях. Для манипулирования EEPORM существуют хорошо известные библиотеки. Управление Flash / Progmem также возможно изнутри программы. Техника описана в техническом паспорте ATMEL AVR105: Энергоэффективное хранение высокопроизводительных параметров во флэш-памяти. Однако я не знаю ни одной библиотеки с открытым исходным кодом, которая поддерживает это.

Если вы хотите сохранить оперативную память, скорее всего, это не тот путь. Вместо этого вы должны поместить строки и другие большие и постоянные вещи в программу.

Для оценки вы должны использовать вместо этого оперативную память, поскольку она постоянно обновляется и нет необходимости сохранять ее значение за пределами одного игрового цикла.

Что касается его, вы можете записать его в EEPROM, когда игра закончится. Согласно данным таблицы, ее можно записать не менее 100 000 раз, поэтому, если вы играете 100 раз в день, 365 дней в году, она не изнашивается почти 3 года. После этого просто измените местоположение EEPROM на другой адрес. Если вы используете Arduino Uno (с 1 Кб EEPROM), у вас есть 32 разных места для хранения данных uint32_t. 32 х 3 года = 96 лет;)

Ваша интуиция верна, в том смысле, что вы не сможете изменить значение, хранящееся в памяти программ (например, Flash/ROM). Если вы беспокоитесь о выжигании EEPROM. Имейте это только обновлять периодически. Тем не менее, вам все еще нужно иметь оперативную память для буферизации.

Я настоятельно рекомендую экономить оперативную память еще где. Смотрите следующую библиотеку примеров для измерения и экономии оперативной памяти

Другие вопросы по тегам