Ich entwickle ein elektronisches Gerät, das aus zwei Teilen besteht: Hardware (Eagle-Schaltpläne) und Firmware (C ++ - Quellcode). Ich möchte Änderungen sowohl im Quellcode als auch in den Schaltplänen verfolgen, aber es gibt einige Punkte, an denen ich nicht sicher bin, wie ich meine Arbeit organisieren soll:
Für den Quellcode würde ich definitiv Git verwenden. Aber sind Schaltpläne eine Versionierung wert, wenn es sich tatsächlich um Binärdateien handelt (neue Eagle-Versionen verwenden ein XML-Format, sind aber nicht so gut lesbar ...)?
Ist es eine gute Idee, Quellen und Schaltpläne in einem Git-Repository abzulegen? Es wäre sinnvoll, aber andererseits würde mein Protokoll sowohl Software- als auch Hardwareänderungen enthalten. Auch die Software kann mehrere Zweige haben, Hardware aber wahrscheinlich nicht ...
Wie gehe ich mit Hardware-Revisionen um? Kennzeichnen oder in separaten Verzeichnissen speichern?
Es kann auch einige Abhängigkeiten zwischen Hardware-Revision und Firmware-Version geben. Wie gehe ich mit ihnen um?
Könnten Sie mir bitte Ihre Best Practices mitteilen?
Antworten:
Das meiste davon hängt von persönlichen Vorlieben ab.
Ich verfolge alles, was ich für ein Projekt in Git mache. Zumal Git die meisten Dateitypen, auch Binärdateien, ausreichend effizient verarbeitet. (Anstelle des eingebauten Altium SVN-Unsinns)
Einer meiner Hauptgründe dafür ist, dass meine Kunden nicht alle der Meinung sind, dass Dropbox sicher genug ist, und ich ein Backup-System benötige, auf das ich weltweit zugreifen kann, mit einem gewissen Versionskontext für die meisten meiner Aktivitäten. Also habe ich einen privaten Git-Server und ein verschlüsseltes Backup-System eingerichtet und es funktioniert ein Vergnügen. Boards, Schaltpläne, Code, Dokumentation, Berichte, manuelle Änderungen, alles wird verfolgt.
Normalerweise würde ich ein Repository für Hardware erstellen, eines für Software und eines für Firmware, wenn es sich um ein großes, möglicherweise lang laufendes Projekt handelt, aber für kleine Serviceprojekte, Beispiele oder kleine Experimente habe ich seitdem oft alles in einem Repository zusammengefasst Das Chaos wird nicht groß sein.
In Git können Sie auch Unter-Repositorys verwenden, um die Firmware in das Hardware-Projekt zu integrieren, oder umgekehrt, selbst wenn es sich um separat verwaltete Repositorys handelt.
Bei größeren Projekten verwende ich häufig auch Bug-Tracking-Systeme, um Probleme und Lösungen zu verfolgen. Auch für HW und SW ist Mantis eine nette Version, die kostenlos verwendet werden kann.
Für Hardware-Revisionen generiere ich Gerbers oder was auch immer Sie haben, die mit dem Git Hash für diese Revision markiert sind. Diese Gerbers sind dann die einzigen diskreten "altmodischen" versionierten Inhalte in Ordnern von R01, 02 usw. Da Sie dies nicht möchten Generieren Sie sie die ganze Zeit neu, aber es handelt sich um resultierende Dateien. Sie sollten daher eigentlich nicht in Git selbst versioniert werden (da Ihre Design-Software beim Generieren von Produktionsinhalten deterministisch sein sollte, oder sonst ...).
Wenn es in R01 etwas Interessantes gibt, das in R02 nicht passiert (oder umgekehrt), haben Sie zwei Git Hashes, mit denen Sie Quelldateien vergleichen können, keine Sorge.
Abschließend möchte ich sagen, dass ein konzeptionelles Beispiel für ein Projekt ein Hardware-Repository enthält, in dem sich auch eine "BoardPinout.h" -Datei befindet. Diese Datei wird als remote versionierte Datei in das Firmware-Repository aufgenommen, das einige Schnittstellendefinitionsdateien enthält, die remote in das Software-Repository aufgenommen werden.
Das heißt, jedes Mal, wenn ich ein paar Signale ändere, ohne die allgemeine Funktionalität zu ändern, "aktualisiert" das HW-Projekt das BoardPinout, das dann aktualisiert und in der Firmware verwendet werden kann, und so weiter.
quelle
1) Es lohnt sich auf jeden Fall, Schaltplan- / Board-Dateien zu versionieren. Auch wenn Sie Unterschiede nicht so einfach nachverfolgen können, haben Sie eine saubere Möglichkeit, zu einer bestimmten Hardwareversion zurückzukehren, wenn Sie mit einer alten Geräteversion arbeiten müssen.
2) Wir haben die folgende Struktur in unserer SVN.
/ tag
/ branch
/ trunk / hardware
/ trunk / software / firmware
Falls zutreffend, mit mehr Unterordnern wie vielleicht / Firmware und / ConfigTool für Software und / Mainboard und / Tochterboard oder so ähnlich für Hardware.
2) Tags werden aus Unterordnern erstellt, die nicht aus dem gesamten Trunk stammen, wie z. B. Tag / Mainboard-v1.2.345. Die Hardware (nämlich die Leiterplatte) enthält immer die SVN-Revision im Siebdruck oder in Kupfer, um einen direkten Bezug zu haben.
4) Abhängigkeiten zwischen Hardware und Firmware können komplex sein. IMO macht es nicht so viel Sinn, auf Repository-Ebene damit umzugehen, außer nützliche Kommentare zu Commits zu hinterlassen.
Ziehen Sie in Betracht, Hardwareänderungen mithilfe von Ersatz-E / A-Pins zu codieren. So etwas wie die Verwendung von 4 Pins zum Codieren von 16 verschiedenen Hardwareversionen. Wir haben auch einen einzelnen ADC-Eingang mit unterschiedlichen Widerstandswerten verwendet, um Versionen zu codieren. Auf diese Weise kann die Software "wissen", auf welcher Hardware sie ausgeführt wird, und bestimmte Funktionen ändern / deaktivieren / aktivieren.
quelle