В продолжение к моей предыдущей теме про потерю имени сети.
Выяснена закономерность, какая то переменная стабильно стирается из EEPROM (который Flash) при выключении-включении.
Сначала это было имя точки доступа, теперь все перешло на имя сервера MQTT. Не зависит от платы и типа платы.
Сначала такие проблемы были когда не правильно зарезервировал место для строковых СИСТЕМНЫХ переменных.
Но теперь все 10 раз проверил. Длинны взял с запасом...
Кто-то знает особенности их распределения во Flash? Может надо ставить длину кратную чему-то? Либо составлять между ними неиспользуемые промежутки?
Системные переменные в Esp8266. Пропадают из Flash
- ivanpost
- Сержант
- Сообщения: 203
- Зарегистрирован: 24 сен 2016, 22:26
- Откуда: Тольятти
- Имя: Иван
- Благодарил (а): 3 раза
- Поблагодарили: 8 раз
- Контактная информация:
Системные переменные в Esp8266. Пропадают из Flash
Сам отвечу, как минимизировал потери:
1. В "EEPROM" пишу только самые нужные переменные, в т.ч. системные, касающиеся точки доступа и клиента оставляю без сохранения.
2. В строковых переменных оставил некоторый запас по длинне, а то выяснялось, что строка оказывалась длиннее выделенного места.
3. Главное. Esp "не любит" хаотичного чтения-записи системных переменных, например, при приеме одной строки из UART на лету велась запись. В результате, какие то переменные начинали писаться, а в это время нужно было записывать новые. Да еще в это же время шло считывание. Это работало не стабильно. Теперь все храню в переменных и произвожу запись связанной группы переменных в ситемные параметры в одной плате. Так же считываю системные параметры в переменную периодически (не в каждом цикле) и в коде уже использую эти простые переменные.
Теперь сбои записи переменных изредка бывают и видны сразу, а внезапное исчезновение прекратилось.
1. В "EEPROM" пишу только самые нужные переменные, в т.ч. системные, касающиеся точки доступа и клиента оставляю без сохранения.
2. В строковых переменных оставил некоторый запас по длинне, а то выяснялось, что строка оказывалась длиннее выделенного места.
3. Главное. Esp "не любит" хаотичного чтения-записи системных переменных, например, при приеме одной строки из UART на лету велась запись. В результате, какие то переменные начинали писаться, а в это время нужно было записывать новые. Да еще в это же время шло считывание. Это работало не стабильно. Теперь все храню в переменных и произвожу запись связанной группы переменных в ситемные параметры в одной плате. Так же считываю системные параметры в переменную периодически (не в каждом цикле) и в коде уже использую эти простые переменные.
Теперь сбои записи переменных изредка бывают и видны сразу, а внезапное исчезновение прекратилось.
- Phazz
- Полковник
- Сообщения: 3115
- Зарегистрирован: 17 окт 2016, 15:38
- Откуда: Сургут
- Имя: Анатолий
- Благодарил (а): 232 раза
- Поблагодарили: 110 раз
Системные переменные в Esp8266. Пропадают из Flash
Я перетащил из flash памяти в SPIFFS. Получилось очень удобно, теперь после прошивки все изменения настроек остаются.
- ivanpost
- Сержант
- Сообщения: 203
- Зарегистрирован: 24 сен 2016, 22:26
- Откуда: Тольятти
- Имя: Иван
- Благодарил (а): 3 раза
- Поблагодарили: 8 раз
- Контактная информация:
Системные переменные в Esp8266. Пропадают из Flash
Не знаю, что не так я делаю, но впечатление что EEPROM (который во Flash) перезаписывается всегда "целиком", всем массивом 4096. Нельзя записать 2 параметра из 10. При сохранении нужно писать все 10 одновременно (8 - старыми параметрами). Как то уже приноровился, но периодически "стреляет".Phazz писал(а): 18 авг 2019, 08:39 Я перетащил из flash памяти в SPIFFS. Получилось очень удобно, теперь после прошивки все изменения настроек остаются.
Думаю, для SPIFFS файла это тоже актуально. Вы сколько их пишете? Для каждой переменной свой файл? Буду благодарен за теоретический совет. У меня в проектах сейчас 20-30 системных параметров, в основном строковых и возня с ними, конечно, утомляет...
- AlexCrane
- Капитан
- Сообщения: 903
- Зарегистрирован: 20 окт 2017, 13:22
- Откуда: Ульяновск
- Имя: Александр
- Поблагодарили: 12 раз
Системные переменные в Esp8266. Пропадают из Flash
[ref=#808080]Phazz[/ref], Примерчик не помешал бы...
Если не знаю, то не скажу. Если скажу, то сначала проверю...
Если нет возможности отблагодарить материально, хотя бы оцени пост....
Если нет возможности отблагодарить материально, хотя бы оцени пост....
- Phazz
- Полковник
- Сообщения: 3115
- Зарегистрирован: 17 окт 2016, 15:38
- Откуда: Сургут
- Имя: Анатолий
- Благодарил (а): 232 раза
- Поблагодарили: 110 раз
Системные переменные в Esp8266. Пропадают из Flash
[ref]ivanpost[/ref], пишу в один файл
Отправлено спустя 11 минут :
Вот пример
Отправлено спустя 11 минут :
Вот пример
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 2 гостя