Мусорные значения в EEPROM. при записи больших значений
Возникла проблема при записи большого значения (например, 2000–5000) в EEPROM с помощью EEPROM.put().
Например, при записи 2000 значений по адресу 5 EEPROM. Некоторые ненужные значения автоматически записываются на ближайший адрес (адрес 4, 6, 7...).
Примечание. Не пытайтесь записать массив из 2000 элементов
Используемая плата: Arduino Uno (Atmega328P)
Q1. Каков типичный диапазон каждого адреса при использовании EEPROM.put()
. Например, EEPROM.write()
имеет предел диапазона 0-255.
Q2 : Как записать адреса EEPROM с большими значениями, не влияя на ближайший адрес.
@Mayoogh Girish, 👍1
Обсуждение1 ответ
Лучший ответ:
Это зависит от того, какой у вас тип переменной. Если у вас есть однобайтовые переменные, такие как byte или char, то это одно значение для одного адреса. Но если у вас есть значение типа int:
int x = 2000;
затем попытайтесь сохранить это в EEPROM, которое займет 2 байта, потому что размер int составляет 2 байта. Поэтому, если вы напишете это по адресу 5, для записи потребуется 5 и 6.
Если вы записываете тип long или float, они составляют 4 байта, поэтому каждый из них займет 4 адресных слота в EEPROM.
Если вы просто напишете EEPROM.put(5, 2000); тогда 2000 рассматривается либо как int, либо как long, в зависимости от того, как написан код. Я не помню. Но вы, конечно же, не можете уместить 2000 в байт, поэтому потребуется больше одного байта.
Литерал 2000
всегда интерпретируется компилятором как int
., @Edgar Bonet
Да, компилятор знает, но я не знаю, как работает функция put. Это может быть похоже на print, где int становится long в функции., @Delta_G
Это [шаблон](https://github.com/arduino/ArduinoCore-avr/blob/1.8.3/libraries/EEPROM/src/EEPROM.h#L137-L142): он использует любой тип аргумента. В отличие от print()
, который представляет собой набор перегрузок., @Edgar Bonet
Хорошо спасибо. Не смог найти, когда писал ответ. Не был уверен, как это обрабатывается, но точно знал, что нам нужно больше одного байта., @Delta_G
- Запустить код один раз после программирования
- Ошибка при вводе EEPROM.read() и EEPROM.write()
- Я закирпичил свой Arduino Uno? Проблемы с загрузкой скетчей на плату
- Не удается снова загрузиться после смены платы
- Получить доступ к EEPROM ATtiny с помощью кода Arduino?
- Генерация стабильной частоты
- В чем разница между ATMEGA32 и ATMEGA328?
- Arduino UNO для получения подписи чипа ATmega328P-PU
Вы пишете значение «2000» или пытаетесь написать массив из 2000 элементов? в вашем вопросе не понятно, @chrisl
@chrisl Я пытаюсь написать значение «2000»., @Mayoogh Girish