Наши друзья из соседней организации продолжают делать нам железку, которая постепенно меняется. До текущего момента было три варианта, и я делал по одной версии прошивки на каждый из них. Сейчас стало понятно, что будет ещё минимум три варианта. Следить за этими вариантами и собирать под каждый из них по отдельной прошивке -- это геморрой. Поэтому мы придумали вот что.

Микроконтроллер содержит в себе отдельный блок энергонезависимой памяти (FRAM), в который можно что-то писать. Вот туда-то мы и будем записывать текущую версию железки и её конфигурацию. А прошивка при старте будет оттуда считывать capabilities и дальше выполнять нужные куски для настройки и т.п. Файл прошивки при этом будет один и тот же. Это не снимет проблем с тестированием, но снимет проблемы со сборкой и выбором нужной версии при прошивке.

Что же делать в аналогичных случаях, когда нет выделенного блока памяти? Тогда можно писать в основной флеш, предназначенный для прошивки. В другом проекте на STM32 я указал в разметке памяти (map-файл), что последний сектор не надо ни записывать, ни стирать. И после этого хранил там свои данные (это были настройки).