Моя структура IdLoc для микроконтроллеров Microchip Pic(r)
Является частью инфраструктуры [проектов] и [печатных плат].
Предпосылка
Я пишу достаточное количество программ и со временем становится трудно в них разобраться. И уж тем более в том, в каком микроконтроллере записана какая версия программы.
Поскольку каждый байт в микроконтроллерах среднего семейства реализован только в нижней половине, то диапазон значений для них составляет 0-15 (или 0-F). И таких байт четыре: 3-0.
Механизм назначения IdLoc
- Для новых программ
- При изменении любой части номера версии (согласно
https://semver.org/, с обязательным назначением тега вида
vX.Y.Z
в репозитарии) - Для вариантов сборок (например, общие катоды и аноды или варианты для разных марок микроконтроллеров)
Можно было бы разделить четыре байта на части: код программы, мажорный номер, минорный номер, номер патча, но большая часть из них никогда не будет израсходована, а количество программ тогда будет ограничено 16 штуками. Уже сейчас этого недостаточно.
Полное количество бит позволяет хранить 2 полных байта, что составляет 65536 значений.
Номера назначаются по порядку. Это похоже на серийные номера.
Установка IdLoc
Установка IdLoc выполняется с помощью директив #pragma
(например, в
моем шаблоне):
#pragma config IDLOC3 = 0x0
#pragma config IDLOC2 = 0x0
#pragma config IDLOC1 = 0x0
#pragma config IDLOC0 = 0x0
Чтение IdLoc
Описание полей файла _data/idlocs.yaml
Шаблон для нового релиза
- idloc30: 0-0-0-0
state: ""
date: 2000-01-01
program: Example
repo: http://example.com
ver: 0.1.0
tag: http://example.com/v0.1.0
chip: PIC16F628A
build:
notes:
Поля шаблона:
idloc30
: перечень значений IdLoc от старшего (3) к младшему (0), разделенных знаком “-“. Назначаются по порядку в шестнадцатеричном формате, максимальное значение каждого разряда - “F”state
: текущий статус идентификатора. Если есть более новая версия программы, то здесь указывается новыйidloc30
.date
: дата создания IdLoc в форматеYYYY-MM-DD
program
: идентификатор программыrepo
: ссылка на репозитарий программы (подставляется в полеprogram
)ver
: идентификатор версии согласно semver.orgtag
: ссылка на тег соответствующей версии в форматеvX.Y.Z
(подставляется в полеver
)chip
: марка микроконтроллераbuild
: опции сборки в виде макросовnotes
: дополнительные примечания
Перечень IdLoc
В перечне IdLoc для каждого заданы якоря в том же виде, в каком они представлены в поле IdLoc30.
IdLoc 0 0 0 0
зарезервирован в качестве шаблона в файле
_data/idlocs.yaml
и используется для начальной инициализации IdLoc.
Последний зарегистрированный IdLoc 0-0-0-9
Зеленым в таблице выделены последние версии.
IdLoc30 | Статус | Дата | Программа | Версия | Контроллер | Сборка | Примечания |
0-0-0-1 | 2014-09-26 | motometer | 1.0.0 | PIC16F628A | |||
0-0-0-2 | 0-0-0-4 | 2014-09-26 | clock_8x8 | 1.0.0 | PIC16F886 | ||
0-0-0-3 | 2014-09-26 | winding_machine | 1.0.0 | PIC16F877 | |||
0-0-0-4 | 0-0-0-5 | 2014-10-29 | clock_8x8 | 1.1.0 | PIC16F886 | ||
0-0-0-5 | 0-0-0-8 | 2014-11-02 | clock_8x8 | 1.2.0 | PIC16F886 | ||
0-0-0-6 | 2015-01-17 | freq_counter | 1.0.1 | PIC16F628A | |||
0-0-0-7 | 0-0-0-8 | 2015-05-11 | temp_sensor_3 | 1.0.1 | PIC16F628A | ||
0-0-0-8 | 2015-12-20 | clock_8x8 | 1.4.0 | PIC16F886 | ANODES_MASK=0x0f | ||
0-0-0-9 | 2020-04-29 | capacity-level-meter | 0.1.0 | PIC16F886 |