Страница 1 из 1

Системные переменные в Esp8266. Пропадают из Flash

Добавлено: 01.08.2019{, 16:08}
ivanpost
В продолжение к моей предыдущей теме про потерю имени сети.

Выяснена закономерность, какая то переменная стабильно стирается из EEPROM (который Flash) при выключении-включении.
Сначала это было имя точки доступа, теперь все перешло на имя сервера MQTT. Не зависит от платы и типа платы.
Сначала такие проблемы были когда не правильно зарезервировал место для строковых СИСТЕМНЫХ переменных.
Но теперь все 10 раз проверил. Длинны взял с запасом...

Кто-то знает особенности их распределения во Flash? Может надо ставить длину кратную чему-то? Либо составлять между ними неиспользуемые промежутки?

Системные переменные в Esp8266. Пропадают из Flash

Добавлено: 18.08.2019{, 00:12}
ivanpost
Сам отвечу, как минимизировал потери:
1. В "EEPROM" пишу только самые нужные переменные, в т.ч. системные, касающиеся точки доступа и клиента оставляю без сохранения.
2. В строковых переменных оставил некоторый запас по длинне, а то выяснялось, что строка оказывалась длиннее выделенного места.
3. Главное. Esp "не любит" хаотичного чтения-записи системных переменных, например, при приеме одной строки из UART на лету велась запись. В результате, какие то переменные начинали писаться, а в это время нужно было записывать новые. Да еще в это же время шло считывание. Это работало не стабильно. Теперь все храню в переменных и произвожу запись связанной группы переменных в ситемные параметры в одной плате. Так же считываю системные параметры в переменную периодически (не в каждом цикле) и в коде уже использую эти простые переменные.

Теперь сбои записи переменных изредка бывают и видны сразу, а внезапное исчезновение прекратилось.

Системные переменные в Esp8266. Пропадают из Flash

Добавлено: 18.08.2019{, 08:39}
Phazz
Я перетащил из flash памяти в SPIFFS. Получилось очень удобно, теперь после прошивки все изменения настроек остаются.

Системные переменные в Esp8266. Пропадают из Flash

Добавлено: 30.06.2020{, 21:15}
ivanpost
Phazz писал(а):
18.08.2019{, 08:39}
Я перетащил из flash памяти в SPIFFS. Получилось очень удобно, теперь после прошивки все изменения настроек остаются.
Не знаю, что не так я делаю, но впечатление что EEPROM (который во Flash) перезаписывается всегда "целиком", всем массивом 4096. Нельзя записать 2 параметра из 10. При сохранении нужно писать все 10 одновременно (8 - старыми параметрами). Как то уже приноровился, но периодически "стреляет".
Думаю, для SPIFFS файла это тоже актуально. Вы сколько их пишете? Для каждой переменной свой файл? Буду благодарен за теоретический совет. У меня в проектах сейчас 20-30 системных параметров, в основном строковых и возня с ними, конечно, утомляет...

Системные переменные в Esp8266. Пропадают из Flash

Добавлено: 30.06.2020{, 22:20}
AlexCrane
Phazz, Примерчик не помешал бы...

Системные переменные в Esp8266. Пропадают из Flash

Добавлено: 02.07.2020{, 11:03}
Phazz
ivanpost, пишу в один файл

Отправлено спустя 11 минут :
Вот пример