Я занимаюсь разработкой электронного устройства, которое состоит из двух частей: аппаратного обеспечения (схема Eagle) и встроенного программного обеспечения (исходный код C ++). Я хотел бы отслеживать изменения как в исходном коде, так и в схемах, но есть некоторые моменты, в которых я не уверен, как организовать свою работу:
Для исходного кода я бы определенно использовал Git. Но стоит ли создавать версии, если они на самом деле являются двоичными файлами (в новых версиях Eagle используется какой-то формат XML, но он не так удобен для чтения человеком ...)?
Хорошая идея поместить источники и схемы в один Git-репозиторий? Это имело бы смысл, но с другой стороны, мой журнал будет содержать как программные, так и аппаратные изменения. Также программное обеспечение может иметь несколько ветвей, но аппаратное обеспечение, вероятно, не ...
Как бороться с аппаратными ревизиями? Отметить их или сохранить в отдельных каталогах?
Также могут быть некоторые зависимости между версией аппаратного обеспечения и версией прошивки. Как с ними бороться?
Не могли бы вы поделиться своими лучшими практиками со мной?
Ответы:
Большая часть этого сводится к личным предпочтениям.
Я отслеживаю все, что я делаю для проекта в Git. Тем более, что Git обрабатывает большинство типов файлов, даже двоичных, достаточно эффективно. (Взамен встроенной ерунды Altium SVN)
Одна из моих главных причин сделать это заключается в том, что мои клиенты не все считают, что Dropbox достаточно безопасен, и мне нужна резервная система, к которой я могу получить доступ по всему миру, а также некоторый контекст управления версиями большинства моих действий. Поэтому я настроил частный сервер Git и зашифрованную систему резервного копирования, и это работает. Платы, схемы, код, документация, отчеты, ручные модификации, все отслеживается.
Обычно я создавал бы репозиторий для аппаратного обеспечения, один для программного обеспечения и один для встроенного программного обеспечения, если это большой, потенциально длительный проект, но для небольших сервисных проектов, примеров или небольших экспериментов я часто помещаю все это в один репозиторий, поскольку хаос не будет большим.
В Git вы также можете использовать вложенные репозитории для интеграции Прошивки в проект Hardware или наоборот, даже если они являются отдельно управляемыми репозиториями.
Для более крупных проектов я также обычно использую системы отслеживания ошибок, чтобы отслеживать проблемы и решения, опять же для HW, а также для SW, Mantis - это хорошая программа, которую можно использовать бесплатно.
Для аппаратных ревизий, которые я генерирую Gerbers, или что там у вас, помеченные Git Hash для этой ревизии, эти Gerbers являются единственными дискретными «старомодными» версиями в папках по R01, 02 и т. Д. Так как вы не хотите обновляйте их все время, но они являются результирующими файлами, поэтому не следует создавать версии в самом Git (потому что ваше программное обеспечение для разработки должно быть детерминированным при создании производственного контента, или иначе ...).
Если в R01 есть что-то интересное, чего нет в R02 (или наоборот), у вас есть два Git-хэша, с которыми вы можете сравнивать исходные файлы, не беспокойтесь.
В заключение, один концептуальный пример проекта будет иметь аппаратный репозиторий, который также содержит файл «BoardPinout.h». Этот файл включен в качестве файла с удаленной версией в хранилище прошивки, в котором есть несколько файлов определения интерфейса, которые удаленно включаются в хранилище программного обеспечения.
То есть каждый раз, когда я изменяю несколько сигналов без изменения широкого функционала, проект HW «обновляет» BoardPinout, который затем можно обновлять и использовать в прошивке и так далее.
источник
1) Это определенно стоит версий файлов схемы / платы. Даже если вы не можете так легко отследить различия, у вас есть чистый способ вернуться к определенной версии оборудования, если вам приходится работать со старой версией устройства.
2) У нас есть следующая структура в нашем SVN.
/ tag
/ ветка
/ trunk / hardware
/ trunk / software / firmware
Если применимо, с большим количеством подпапок, таких как, возможно, / Firmware и / ConfigTool для программного обеспечения и / mainboard и / дочерняя плата или что-то подобное для аппаратного обеспечения.
2) Теги создаются из подпапок, а не из всего ствола, как Tag / Mainboard-v1.2.345. Аппаратное обеспечение (а именно печатная плата) всегда содержит ревизию SVN на шелкографии или в меди, чтобы иметь прямую ссылку.
4) Зависимости между оборудованием и прошивкой могут быть сложными. ИМО, не имеет особого смысла иметь дело с этим на уровне хранилища, кроме как оставлять полезные комментарии по коммитам.
Рассмотрим изменения аппаратного кодирования с помощью запасных выводов ввода / вывода. Что-то вроде использования 4-х контактов для кодирования 16 различных версий оборудования. Мы также использовали один вход АЦП с различными значениями сопротивления для кодирования версий. Таким образом, программа может «знать», на каком оборудовании оно работает, и изменять / отключать / включать определенные функции.
источник