При первом старте в EEPROM есть данные?
- Войдите на сайт для отправки комментариев
Ср, 09/02/2022 - 01:53
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)!
При жизненом первом старте тама-тама есть данные?
выкладывате код целиком, что такое g ?
При жизненом первом старте тама-тама есть данные?
Изначально во все байты EEPROM записано 0xFF
А банально проверить не судьба?
Изначально во все байты EEPROM записано 0xFF
Вот именно.
И это надо иметь в виду при "затирании".
выкладывате код целиком, что такое g ?
А мне вот тоже не понятно - что такое "g"? Может у нее всегда "длина" больше чем объем EEPROM? Получится просто цикличная перезапись EEPROM ))
Да и зачем её (EEPROM) "инициализировать нулями"? Объем известен из даташита на "камень".
А зачем затирать eeprom ?
Чтобы не было проблем потом. Еером чаще всего используется для хранения прошлых настроек, чтобы не надо было вводить их каждый раз при перезапуске устройства. Представьте, запускаете Вы скетч, он берет значения из еером. А там что-то, чего быть не должно и не предусмотрено.
Чтобы не было проблем потом. Еером чаще всего используется для хранения прошлых настроек, чтобы не надо было вводить их каждый раз при перезапуске устройства. Представьте, запускаете Вы скетч, он берет значения из еером. А там что-то, чего быть не должно и не предусмотрено.
По умолчанию, EEPROM забит 0xFF, вот и инициализируй его тем же значением, не лей нули против ветра.
Чтобы не было проблем потом. Еером чаще всего используется для хранения прошлых настроек, чтобы не надо было вводить их каждый раз при перезапуске устройства. Представьте, запускаете Вы скетч, он берет значения из еером. А там что-то, чего быть не должно и не предусмотрено.
Бред.
Любое значение что 0х00 что 0xFF может привести к проблемам.
Что бы привести риски к минимуму, во первых следует при запуске проверять, не первый ли это запуск(прочитав и сравнив содержимое по некому адресу памяти с каким то значением). И если это первый запуск , то записать в нужные адреса значения по умолчанию и метку о том что первый запуск уже был.
А во вторых можно сравнивать значения в нужных ячейках EEPROM, с диапазоном значений, которые они могут принимать.
Так что запись в eeprom нулевых значений не имеет никакого смысла.
Так что запись в eeprom нулевых значений не имеет никакого смысла.
ну как не имеет, а сокращение жизни епром?
Все верно. При включении проверяются данные из EEPROM на допустимые значения и при нужде перезаписываются значениями по умолчанию. Если что, можно предусмотреть возврат к "заводским установкам" - если при включении нажата определенная кнопка, забить в EEPROM настройки по умолчанию. А просто обнулять смысла не имеет.
Чтобы не было проблем потом. Еером чаще всего используется для хранения прошлых настроек, чтобы не надо было вводить их каждый раз при перезапуске устройства. Представьте, запускаете Вы скетч, он берет значения из еером. А там что-то, чего быть не должно и не предусмотрено.
Пиши вместе с данными контрольную сумму (CRC8 хотя бы) и если при чтении она не совпадает с вычисленной, значит данные не валидны.
Чтобы не было проблем потом. Еером чаще всего используется для хранения прошлых настроек, чтобы не надо было вводить их каждый раз при перезапуске устройства. Представьте, запускаете Вы скетч, он берет значения из еером. А там что-то, чего быть не должно и не предусмотрено.
Пиши вместе с данными контрольную сумму (CRC8 хотя бы) и если при чтении она не совпадает с вычисленной, значит данные не валидны.
Если значений не в притык памяти EEPROM - можно в первые 2-3 ячейки писать одинаковые значения после инициализации. Потом читать их и проверять. Это проще и надежнее способа ТС))
Если значений не в притык памяти EEPROM - можно в первые 2-3 ячейки писать одинаковые значения после инициализации. Потом читать их и проверять. Это проще и надежнее способа ТС))
Если памяти не в притык, то любые данные в EEPROM имеет смысл защищать CRC. Поскольку данные и во флэш и в EEPROM имееют свойство портится даже просто со временем.
Версию скетча тоже неплохо туда писать чтобы при очередном обновлении можно было сбросить настройки или трансформировать данные при необходимости ну и как индикатор "первого запуска" можно использовать.
Если значений не в притык памяти EEPROM - можно в первые 2-3 ячейки писать одинаковые значения после инициализации. Потом читать их и проверять. Это проще и надежнее способа ТС))
Если памяти не в притык, то любые данные в EEPROM имеет смысл защищать CRC. Поскольку данные и во флэш и в EEPROM имееют свойство портится даже просто со временем.
Не имеет особого смысла та CRC. Суди сам, если происходят:
1. Глюк в коде и портится часть данных.
2. Корректная запись еще части данных с по последующим подсчетом CRC по всем данным, включая глюконувшие.
3. Имеем верную CRC при не верных данных.
Для отслеживания совершенно чистой EEPROM достаточно флага.
Для защиты данных - надо чтоб твой код не глючил, кроме него некому те данные портить. Про время - ну 10 лет гарантируют сохранность.
Еще важно бывает отследить проблему отключения питания во время записи. Об этом на форуме есть..
А у кого нибудь хоть раз EEPROM портился реально? Ну то есть личный опыт, а не городские легенды?
Да, бывало но не на атмеге.
А у кого нибудь хоть раз EEPROM портился реально? Ну то есть личный опыт, а не городские легенды?
Вполне реальные случаи если писать при проседании питания
https://microchipsupport.force.com/s/article/Prevent-EEPROM-corruption