4c0f9672f3be110f682065230c523bc2e6b5253f
EEPROM.commit() на целевой плате возвращает false — падает сам вызов SDK. Проверкой исходников исключены ошибка в библиотеке, перекрытие адресов и стирание сектора со стороны WiFiManager. Физический размер флеша тоже ни при чём: LittleFS на этом же чипе работает, что подтверждено соседним проектом на такой же плате. Наиболее вероятный механизм: при раскладке 4MB/FS:2MB сектор EEPROM (1019, 0x3FB000) попадает в щель между концом ФС (0x3FA000) и служебной областью SDK (0x3FC000) и оказывается защищён от стирания. Доказать не удалось, поэтому в документации гипотеза помечена как гипотеза. Переход на LittleFS выбран не как обход симптома, а как переезд на подтверждённо работающий на этом железе механизм. Настройки теперь в /settings.json (ArduinoJson v7). Загрузка отказоустойчива: отсутствующий или битый ключ оставляет значение по умолчанию, поэтому файл от прошлой версии прошивки не ломается при добавлении полей. Имена ключей вынесены в константы KEY_*, используемые и при чтении, и при записи. Молчаливой потери настроек больше нет: при недоступной ФС взводится settingsFsReady = false, и веб-панель показывает предупреждение, что настройки не переживут перезагрузку. В лог при старте выводится геометрия ФС и предупреждение при выборе FS:none. Проверено: xtensa-lx106-elf-g++ -fsyntax-only -Wall -Wextra против ядра 3.1.2 — предупреждений нет. На железе не проверялось. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Description
No description provided
685 KiB
Languages
C++
58.5%
C
41.5%