Мусорные значения в 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 с большими значениями, не влияя на ближайший адрес.

, 👍1

Обсуждение

Вы пишете значение «2000» или пытаетесь написать массив из 2000 элементов? в вашем вопросе не понятно, @chrisl

@chrisl Я пытаюсь написать значение «2000»., @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