Je développe un appareil électronique qui comprend deux parties: le matériel (schémas Eagle) et le firmware (code source C ++). Je voudrais suivre les changements dans le code source et les schémas, mais il y a certains points où je ne sais pas comment organiser mon travail:
Pour le code source, j'utiliserais certainement Git. Mais les schémas valent-ils la version alors qu'ils sont en fait des fichiers binaires (les nouvelles versions d'Eagle utilisent un certain format XML, mais ce n'est pas si lisible par l'homme ...)?
Est-ce une bonne idée de mettre les sources et les schémas dans un référentiel Git? Cela aurait du sens, mais d'un autre côté, mon journal contiendrait des modifications logicielles et matérielles. Le logiciel peut également avoir plusieurs branches, mais le matériel ne l'est probablement pas ...
Comment gérer les révisions matérielles? Les étiqueter ou les enregistrer dans des répertoires séparés?
Il pourrait également y avoir des dépendances entre la révision du matériel et la version du firmware. Comment y faire face?
Pourriez-vous s'il vous plaît partager vos meilleures pratiques avec moi?
Réponses:
La plupart se résument à des préférences personnelles.
Je fais le suivi de tout ce que je fais pour un projet dans Git. D'autant plus que Git gère la plupart des types de fichiers, même binaires, de manière suffisamment efficace. (Au lieu de non-sens Altium SVN intégré)
L'une de mes principales raisons pour le faire est que mes clients ne pensent pas tous que Dropbox est suffisamment sûr et j'ai besoin d'un système de sauvegarde auquel je puisse accéder à travers le monde, avec également un contexte de versioning sur la plupart de mes activités. J'ai donc mis en place un serveur Git privé et un système de sauvegarde crypté et ça marche un régal. Cartes, schémas, code, documentation, rapports, modifications manuelles, tout est suivi.
Je créerais normalement un référentiel pour le matériel, un pour le logiciel et un pour le micrologiciel s'il s'agit d'un grand projet potentiellement de longue durée, mais pour les petits projets de service, des exemples ou de petites expériences, je mets souvent le tout dans un seul référentiel, car le résultat le chaos ne sera pas grand.
Dans Git, vous pouvez également utiliser des sous-référentiels pour intégrer le micrologiciel dans le projet matériel ou inversement, même s'il s'agit de référentiels gérés séparément.
Pour les projets plus importants, j'utilise également couramment des systèmes de suivi des bogues pour garder une trace des problèmes et des résolutions, encore une fois pour HW ainsi que SW, Mantis est un bon qui peut être utilisé gratuitement.
Pour les révisions matérielles, je génère des Gerbers, ou tout ce que vous avez, étiquetés avec le Git Hash pour cette révision, ces Gerbers sont alors les seuls éléments versionnés "à l'ancienne" discrets dans les dossiers par R01, 02, etc. Puisque vous ne voulez pas les régénérer tout le temps, mais ce sont des fichiers résultants donc ne devraient pas être versionnés dans Git lui-même, vraiment (parce que votre logiciel de conception devrait être déterministe avec la génération de contenu de production, ou bien ...).
S'il y a quelque chose d'intéressant dans R01 qui ne se produit pas dans R02 (ou l'inverse), vous avez deux Git Hash avec lesquels vous pouvez comparer les fichiers source, pas de soucis.
Enfin, un exemple conceptuel d'un projet aurait un référentiel matériel, qui héberge également un fichier "BoardPinout.h". Ce fichier est inclus en tant que fichier versionné à distance dans le référentiel du micrologiciel, qui contient quelques fichiers de définition d'interface qui sont inclus à distance dans le référentiel logiciel.
Cela signifie que chaque fois que je modifie quelques signaux sans modifier les fonctionnalités générales, le projet HW "met à jour" le BoardPinout, qui peut ensuite être mis à jour et utilisé dans le micrologiciel, etc.
la source
1) Cela vaut vraiment la peine de versionner les fichiers schématiques / cartes. Même si vous ne pouvez pas suivre les différences si facilement, vous avez un moyen propre de revenir à une version matérielle spécifique si vous devez travailler avec une ancienne révision de périphérique.
2) Nous avons la structure suivante dans notre SVN.
/ tag
/ branche
/ trunk / hardware
/ trunk / software / firmware
Si applicable avec plus de sous-dossiers comme peut-être / Firmware et / ConfigTool pour le logiciel et / mainboard et / filleboard ou quelque chose comme ça pour le matériel.
2) Les balises sont créées à partir de sous-dossiers et non de l'ensemble du tronc, comme Tag / Mainboard-v1.2.345. Le matériel (à savoir le PCB) contient toujours la révision SVN dans la sérigraphie ou en cuivre pour avoir une référence directe.
4) Les dépendances entre le matériel et le micrologiciel peuvent être complexes. OMI, cela n'a pas beaucoup de sens de le traiter au niveau du référentiel, sauf en laissant des commentaires utiles sur les commits.
Envisagez de coder les modifications matérielles à l'aide de broches d'E / S de rechange. Quelque chose comme l'utilisation de 4 broches pour coder 16 versions matérielles différentes. Nous avons également utilisé une seule entrée ADC avec différentes valeurs de résistance pour coder les versions. De cette façon, le logiciel peut «savoir» sur quel matériel il s'exécute et modifier / désactiver / activer des fonctionnalités spécifiques.
la source