При первом старте в EEPROM есть данные?

pavelrer
Offline
Зарегистрирован: 22.01.2022
EEPROM.get(eeAddress, g);
  if (g.length() > EEPROM.length())                 // Что-то инородное во flash, слишком длинные данные, наблюдается при первом запуске программы
  {
    for (int i = 0 ; i < EEPROM.length() ; i++)
    {
      EEPROM.write(i, 0);                           // Затираем весь flash
    }
  }

сТАРТ КАМЕШКА, решил только так (v setup)!

При жизненом первом старте тама-тама есть данные?

 

b707
Offline
Зарегистрирован: 26.05.2017

выкладывате код целиком, что такое g ?

v258
v258 аватар
Offline
Зарегистрирован: 25.05.2020

pavelrer пишет:

При жизненом первом старте тама-тама есть данные?

Изначально во все байты EEPROM записано 0xFF

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

pavelrer пишет:
При жизненом первом старте тама-тама есть данные?

А банально проверить не судьба?

v258 пишет:

Изначально во все байты EEPROM записано 0xFF

Вот именно.

И это надо иметь в виду при "затирании".

 

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

b707 пишет:

выкладывате код целиком, что такое g ?

А мне вот тоже не понятно - что такое "g"? Может у нее всегда "длина" больше чем объем EEPROM? Получится просто цикличная перезапись EEPROM ))

Да и зачем её (EEPROM) "инициализировать нулями"? Объем известен из даташита на "камень".

Kakmyc
Offline
Зарегистрирован: 15.01.2018

А зачем затирать eeprom ?

Yaroslav10110
Yaroslav10110 аватар
Offline
Зарегистрирован: 10.11.2020

Чтобы не было проблем потом. Еером чаще всего используется для хранения прошлых настроек, чтобы не надо было вводить их каждый раз при перезапуске устройства. Представьте, запускаете Вы скетч, он берет значения из еером. А там что-то, чего быть не должно и не предусмотрено.

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Yaroslav10110 пишет:

Чтобы не было проблем потом. Еером чаще всего используется для хранения прошлых настроек, чтобы не надо было вводить их каждый раз при перезапуске устройства. Представьте, запускаете Вы скетч, он берет значения из еером. А там что-то, чего быть не должно и не предусмотрено.

По умолчанию, EEPROM забит 0xFF, вот и инициализируй его тем же значением, не лей нули против ветра. 

Kakmyc
Offline
Зарегистрирован: 15.01.2018

Yaroslav10110 пишет:

Чтобы не было проблем потом. Еером чаще всего используется для хранения прошлых настроек, чтобы не надо было вводить их каждый раз при перезапуске устройства. Представьте, запускаете Вы скетч, он берет значения из еером. А там что-то, чего быть не должно и не предусмотрено.

Бред.
Любое значение что 0х00 что 0xFF может привести к проблемам.
Что бы привести риски к минимуму, во первых следует при запуске проверять, не первый ли это запуск(прочитав и сравнив содержимое по некому адресу памяти с каким то значением). И если это первый запуск , то записать в нужные адреса значения по умолчанию и метку о том что первый запуск уже был.
А во вторых можно сравнивать значения в нужных ячейках EEPROM, с диапазоном значений, которые они могут принимать.
Так что запись в eeprom нулевых значений не имеет никакого смысла.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Kakmyc][quote=Yaroslav10110 пишет:

 Так что запись в eeprom нулевых значений не имеет никакого смысла.

ну как не имеет, а сокращение жизни епром?

v258
v258 аватар
Offline
Зарегистрирован: 25.05.2020

Все верно. При включении проверяются данные из EEPROM на допустимые значения и при нужде перезаписываются значениями по умолчанию. Если что, можно предусмотреть возврат к "заводским установкам" - если при включении нажата определенная кнопка, забить в EEPROM настройки по умолчанию. А просто обнулять смысла не имеет.

asam
asam аватар
Offline
Зарегистрирован: 12.12.2018

Yaroslav10110 пишет:

Чтобы не было проблем потом. Еером чаще всего используется для хранения прошлых настроек, чтобы не надо было вводить их каждый раз при перезапуске устройства. Представьте, запускаете Вы скетч, он берет значения из еером. А там что-то, чего быть не должно и не предусмотрено.

Пиши вместе с данными контрольную сумму (CRC8 хотя бы) и если при чтении она не совпадает с вычисленной, значит данные не валидны.

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

asam пишет:

Yaroslav10110 пишет:

Чтобы не было проблем потом. Еером чаще всего используется для хранения прошлых настроек, чтобы не надо было вводить их каждый раз при перезапуске устройства. Представьте, запускаете Вы скетч, он берет значения из еером. А там что-то, чего быть не должно и не предусмотрено.

Пиши вместе с данными контрольную сумму (CRC8 хотя бы) и если при чтении она не совпадает с вычисленной, значит данные не валидны.

Если значений не в притык памяти EEPROM - можно в первые 2-3 ячейки писать одинаковые значения после инициализации. Потом читать их и проверять. Это проще и надежнее способа ТС))

asam
asam аватар
Offline
Зарегистрирован: 12.12.2018

BOOM пишет:

Если значений не в притык памяти EEPROM - можно в первые 2-3 ячейки писать одинаковые значения после инициализации. Потом читать их и проверять. Это проще и надежнее способа ТС))

Если памяти не в притык, то любые данные в EEPROM имеет смысл защищать CRC. Поскольку данные и во флэш и в EEPROM имееют свойство портится даже просто со временем. 

Morroc
Offline
Зарегистрирован: 24.10.2016

Версию скетча тоже неплохо туда писать чтобы при очередном обновлении можно было сбросить настройки или трансформировать данные при необходимости ну и как индикатор "первого запуска" можно использовать.

Logik
Offline
Зарегистрирован: 05.08.2014

asam пишет:

BOOM пишет:

Если значений не в притык памяти EEPROM - можно в первые 2-3 ячейки писать одинаковые значения после инициализации. Потом читать их и проверять. Это проще и надежнее способа ТС))

Если памяти не в притык, то любые данные в EEPROM имеет смысл защищать CRC. Поскольку данные и во флэш и в EEPROM имееют свойство портится даже просто со временем. 

Не имеет особого смысла та CRC. Суди сам, если  происходят:

1.  Глюк в коде и  портится часть данных.

2.  Корректная запись еще части данных с по последующим подсчетом CRC по всем данным, включая глюконувшие.

3. Имеем верную CRC при не верных данных.

Для отслеживания совершенно чистой EEPROM достаточно флага.

Для защиты данных - надо чтоб твой код не глючил, кроме него некому те данные портить. Про время - ну 10 лет гарантируют сохранность.

Еще важно бывает отследить проблему отключения питания во время записи. Об этом на форуме есть..

Rumata
Rumata аватар
Offline
Зарегистрирован: 29.03.2019

А у кого нибудь хоть раз EEPROM портился реально? Ну то есть личный опыт, а не городские легенды?

Logik
Offline
Зарегистрирован: 05.08.2014

Да, бывало но не на атмеге.

asam
asam аватар
Offline
Зарегистрирован: 12.12.2018

Rumata пишет:

А у кого нибудь хоть раз EEPROM портился реально? Ну то есть личный опыт, а не городские легенды?

Вполне реальные случаи если писать при проседании питания

https://microchipsupport.force.com/s/article/Prevent-EEPROM-corruption