Comments 14
Не лучше выделить пару страниц под простую фс и заливать данные подобного рода уже после прошивки? Таким образом при проверке целостности прошивки у вас будут одинаковые контрольные суммы для каждого экземпляра устройства, что может быть критично в контроле при серийном производстве? И так же можно отдельно контролировать целостность данных в фс, отдельно хранить "слепки" фс для каждого устройства при необходимости восстановления/разбора инцидентов, легче организовать шифрование данных.
Да. Это лучше. Называется NVRAM.
NVRAM для микроконтроллеров / Хабр https://share.google/PdklZbkBffAkOMTkp
Если есть решение лучше, зачем танцы с бубном вокруг худшего?
Фиксированные адреса в купе с TunerPRO -
это простое паллиативное решение для тех, кто в силу своей некомпетентности не может запустить в прошивке полноценный NVRAM.
Как будто тот же LittleFS поднять все ещё проще, и работать будет одинаково в любом инструментарии. Разве что файл линковщика желательно все же поправить для выделения секции. Я честно не могу себе представить сценария, где-нужно так заморачиваться с хранением констант, разве, что флеша прямо совсем не хватает.
На работе активно используем этот приём с компоновкой настроек через секцию линковщика, кстати это успешно реализуется и в Keil, IAR, даже в MSVC. Но тут есть нюансы. 1. Константу придётся помечать как volatile так как компилятор вполне может встроить значение константы вместо фактического чтения из ПЗУ. 2. Не гарантируется фиксированный порядок расположения констант в секции. Например если добавляется один новый uint8_t, то он может попасть где то по середине так как с учётом выравнивания линковщик старается плотнее расположить данные.
Константу придётся помечать как volatile так как компилятор вполне может встроить значение константы вместо фактического чтения из ПЗУ.
Если в GCC объявить глобально
const volatile uint8_t val = 10;
то переменная val окажется в RAM памяти.
Не гарантируется фиксированный порядок расположения констант в секции. Например если добавляется один новый uint8_t, то он может попасть где то по середине так как с учётом выравнивания линковщик старается плотнее расположить данные.
Тогда заворачиваем все эти переменные в структуру.
А в чем практическая необходимость такого решения?
Размещение глобальных констант по фиксированным адресам