Поскольку проверить, что конкретно зашито в микроконтроллер, нелегко, как правило в прошивку добавляется команда, возвращающая номер версии. У меня по основному проекту такой функции долго не было -- и я мучился. Потом я такую функцию добавил. Вместо номера версии я решил хранить дату коммита. Для хранения я выбрал целое число (int32). Дата содержит восемь цифр, YYYYMMDD, поэтому 32-битный тип вполне подходит для её хранения.
Далее, дату надо как-то получать. У меня уже была готовая функция для чтения и записи параметров в микроконтроллер, но поскольку контроллер работает и с некоторой математикой, для единообразия я получал и записывал данные как float (32 бита). Целые числа тоже перегонялись во флоат и обратно. Я знаю, как устроен тип флоат, и как с ним работать, поэтому я мог быть уверен, что целые числа будут гоняться туда-сюда без погрешностей.
На самом деле я знал это не досконально, а именно, я не помнил конкретное число бит под мантиссу и порядок.
Один из коммитов был первого июля. Дата: 20210701. Однако, когда я решил получить номер версии у прошитого микроконтроллера, я с удивлением получил несуществующий день, а именно, 20210700. Почему же? Я открыл интернет и обнаружил, что под мантиссу в типе float выделяется 23 бита (24 неявно), что в пересчёте на десятичные числа даёт 7-8 значащих цифр (знак хранится отдельно, поэтому можно рассчитывать на сохранение чисел от -16777215 до 16777215). 20210701 превышает максимальное число, которое можно хранить без потерь. И в рамках типа float это необоримо.
Остаётся только не хранить ведущие цифры года, поскольку и так понятно, что они будут "20". Шесть цифр я могу хранить гарантированно.