commit 7a78bf43ce225d875e5855800ed0fdbefe1d519a Author: Andrey Kruchinkin Date: Sun Aug 23 01:14:43 2026 +0300 chore: каркас репозитория и правила оформления библиотек Репозиторий собирает переносимые библиотеки, которые до сих пор жили копиями внутри прошивок: одни и те же st7789, keypad, menu и eeprom лежали в KONOR_ds18b20 и OpticalTester побайтово одинаковыми и расходились при первой же правке на месте. CONTRIBUTING описывает критерий отбора (ядро без HAL, регистров, ОС и динамической памяти; всё аппаратное — в порте), обязательный состав README библиотеки и формат коммитов. diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..680a254 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,21 @@ +root = true + +[*] +charset = utf-8 +end_of_line = lf +insert_final_newline = true +trim_trailing_whitespace = true +indent_style = space +indent_size = 4 + +[*.{c,h}] +max_line_length = 100 + +[*.py] +max_line_length = 100 + +[*.md] +trim_trailing_whitespace = false + +[*.{yml,yaml,json}] +indent_size = 2 diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..e992ec1 --- /dev/null +++ b/.gitignore @@ -0,0 +1,24 @@ +# сборка +build/ +cmake-build-*/ +*.o +*.d +*.a +*.elf +*.bin +*.hex +*.map +*.lst + +# Python +__pycache__/ +*.py[cod] +.venv/ +*.egg-info/ + +# среды и ОС +.vscode/ +.idea/ +*.uvguix.* +Thumbs.db +Desktop.ini diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000..912859f --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,86 @@ +# Как добавлять и править библиотеки + +## Что попадает в этот репозиторий + +Библиотека принимается, если её ядро: + +* собирается любым компилятором C99 (для Python — на чистой stdlib); +* не включает заголовки микроконтроллера, HAL, CMSIS и SDK; +* не обращается к регистрам и не заводит своих прерываний; +* не пользуется динамической памятью; +* не держит глобального состояния: всё живёт в структуре вызывающего, + поэтому в одной прошивке поднимается сколько угодно экземпляров. + +Всё аппаратное выносится в **порт** — таблицу обратных вызовов. Хороший размер +порта: от трёх до шести функций. Если их получается пятнадцать, граница +проведена не там. + +Код, привязанный к плате, остаётся в проекте. Если его хочется перенести — +не копируйте, а сначала отделите платформу; заметку о том, что именно мешает, +допишите в раздел «Что сюда не попало» корневого README. + +## Раскладка библиотеки + +``` +c/<имя>/ + README.md обязательно + <имя>.h, <имя>.c ядро + ports/<платформа>/ пример порта, если он есть + tests/ хостовые тесты, если они есть +``` + +Имена каталогов — строчными, слова через дефис (`eeprom-ft24c256`). + +## README библиотеки + +Обязателен для каждой. Минимум: + +1. одна строка о том, что библиотека делает; +2. чем она не является — от чего не зависит, чего внутри нет; +3. схема слоёв: приложение → ядро → порт → платформа; +4. таблица файлов с зависимостями; +5. контракт порта — прототипы обратных вызовов; +6. быстрый старт: рабочий фрагмент на 10–15 строк; +7. в каких проектах уже используется. + +Описание пишется для того, кто видит библиотеку впервые и решает, подойдёт ли +она ему, — не для того, кто её написал. + +Doxygen-комментарии в заголовке README не заменяют, и наоборот: в заголовке — +контракт каждой функции, в README — зачем всё это вместе. + +## Совместимость + +Публичный API — это обещание: его ломают осознанно и описывают в теле коммита +(что изменилось и что делать проектам). Молчаливое переименование поля +структуры ломает чужую сборку через месяц, когда никто уже не помнит почему. + +Правки вносятся здесь, а не в копии внутри проекта. Копия, которую поправили +на месте, — источник расхождения версий. + +## Коммиты + +Conventional Commits: область — имя библиотеки, текст по-русски, +повелительное наклонение, строка заголовка до 72 символов. + +``` +feat(st7789): драйвер TFT-панелей ST7789V поверх SPI +fix(menu): курсор не уезжает за последний пункт на пустом экране +docs(keypad): контракт порта и быстрый старт +refactor(pcan): разбор кадра вынесен из обработчика прерывания +test(ds18b20): проверка CRC8 на эталонных scratchpad +chore: правила оформления библиотек +``` + +Типы: `feat`, `fix`, `docs`, `refactor`, `test`, `perf`, `build`, `chore`. + +Один коммит — одно изменение в одной библиотеке. Коммит «поправил всё» +невозможно ни прочитать, ни откатить. + +Тело коммита отвечает на «почему», а не на «что»: что именно изменилось, +видно из диффа. + +## Ветки + +`master` держится собираемым. Работа идёт в ветках `feat/<имя>` и +`fix/<имя>`; вливание — после того, как хостовые тесты библиотеки прошли.