• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Как узнать, что это первый запуск после прошивки?

Vovka

Member
Для инициализации EEPROM нужно знать, первый раз запускается модуль после прошивки или нет.
EEPROM может быть как чистая, так и с каким-то мусором. Поэтому контролировать значение в EEPROM не совсем правильно.
Единственное, что приходит в голову, это контрольная сумма. Но постоянно ее обновлять после записи в EEPROM ...
Может есть другие варианты?
 

Сергей_Ф

Moderator
Команда форума
Для инициализации EEPROM нужно знать, первый раз запускается модуль после прошивки или нет.
EEPROM может быть как чистая, так и с каким-то мусором. Поэтому контролировать значение в EEPROM не совсем правильно.
Единственное, что приходит в голову, это контрольная сумма. Но постоянно ее обновлять после записи в EEPROM ...
Может есть другие варианты?
Вы же и так пишете в EEPROM, ну так и пишете сразу контрольную сумму. За раз. В чём проблема? Даже куча библиотек есть.
Ну и как вариант FS. И там контрольный файлик с данными.
 

pvvx

Активный участник сообщества
Для инициализации EEPROM нужно знать, первый раз запускается модуль после прошивки или нет.
EEPROM может быть как чистая, так и с каким-то мусором. Поэтому контролировать значение в EEPROM не совсем правильно.
Единственное, что приходит в голову, это контрольная сумма. Но постоянно ее обновлять после записи в EEPROM ...
Может есть другие варианты?
А как вы узнаете, что это запись флага в EEPROM или FS от новой прошивки, если её уже записала старая прошивка? Или просто отключали питание / сбой питания при записи?
Только патчить уже записанный код в Flash - саму область прошивки. Или вести контроль версий и прописывать номер версии в свободную часть Flash.
 

Сергей_Ф

Moderator
Команда форума
А как вы узнаете, что это запись флага в EEPROM или FS от новой прошивки, если её уже записала старая прошивка? Или просто отключали питание / сбой питания при записи?
Только патчить уже записанный код в Flash - саму область прошивки. Или вести контроль версий и прописывать номер версии в свободную часть Flash.
С ФС при сбоях все просто, пишем в новый файл. Сбойнул при записи, ну так есть старый. И так по кругу из двух файлов. А если вся ФС сбойнула, то как раз и нужна инициализация. Тут без вариантов.
С Eeprom все только ручками. И желательно тоже с копиями :)
А данные от старой как раз и нужны, чтобы их подхватить. Я так понял.
 

pvvx

Активный участник сообщества
С ФС при сбоях все просто, пишем в новый файл. Сбойнул при записи, ну так есть старый. И так по кругу из двух файлов. А если вся ФС сбойнула, то как раз и нужна инициализация. Тут без вариантов.
Как это "без вариантов"? Вы уже описали несколько неоднозначных вариантов, не гарантирующих факта, что залита и стартанула новая прошивка.
 

Сергей_Ф

Moderator
Команда форума
Как это "без вариантов"? Вы уже описали несколько неоднозначных вариантов, не гарантирующих факта, что залита и стартанула новая прошивка.
Я понял ТС что новая - это совсем другая прошивка. А вовсе не новая версия. В новой версии инициализировать всё заново надобности нет, обычно.
 

pvvx

Активный участник сообщества
Для инициализации EEPROM нужно знать, первый раз запускается модуль после прошивки или нет.
Для этого существует номер версии, прописываемый в эмуляцию EEPROM в FLash или ещё как-то в Flash.
EEPROM может быть как чистая, так и с каким-то мусором. Поэтому контролировать значение в EEPROM не совсем правильно.
Если значение версии верно или ниже, то все нормальные программы при рестарте далее проверяют остальные параметры на критические значения и
1) если номер последней записанной версии ниже, и не совместим - инициируют значениями по умолчанию.
2) если номер последней записанной версии ниже, и совместим - конвертируют параметры в новые или меняют на адекватные, совместимые с новой версией, дополняют новыми параметрами.
Единственное, что приходит в голову, это контрольная сумма. Но постоянно ее обновлять после записи в EEPROM ...
Контрольная сумма так-же может совпасть и с шумом.
Она нужна только в случае когда произошел сбой. Но если у вас правильная система записи переменных, то сбой практически невозможен.
Для таких экстренных случаев, когда шум вдруг совпал с записанными адекватными параметрами, ставят кнопку сброса параметров на default.
 
Сверху Снизу