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

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

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

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

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

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

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

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

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

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

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

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

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

Добавлено: 30 июн 2020, 22:20
AlexCrane
[ref=#808080]Phazz[/ref], Примерчик не помешал бы...

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

Добавлено: 02 июл 2020, 11:14
Phazz
[ref]ivanpost[/ref], пишу в один файл

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