Saya mengembangkan perangkat elektronik yang memiliki dua bagian: perangkat keras (skema Elang) dan firmware (kode sumber C ++). Saya ingin melacak perubahan dalam kode sumber dan skema, tetapi ada beberapa poin di mana saya tidak yakin bagaimana mengatur pekerjaan saya:
Untuk kode sumber saya pasti akan menggunakan Git. Tetapi apakah skematik layak versi ketika mereka sebenarnya adalah file biner (versi Eagle baru menggunakan beberapa format XML, tetapi tidak bisa dibaca oleh manusia ...)?
Apakah ide yang baik untuk menempatkan sumber dan skema ke dalam satu repositori Git? Itu masuk akal, tetapi di sisi lain log saya akan berisi perubahan perangkat lunak dan perangkat keras. Juga perangkat lunak dapat memiliki beberapa cabang, tetapi perangkat keras mungkin tidak ...
Bagaimana cara menangani revisi perangkat keras? Beri tag atau simpan di direktori terpisah?
Juga mungkin ada beberapa dependensi antara revisi perangkat keras dan versi firmware. Bagaimana cara menghadapinya?
Bisakah Anda berbagi praktik terbaik Anda dengan saya?
Jawaban:
Sebagian besar tergantung pada preferensi pribadi.
Saya melacak semua yang saya lakukan untuk proyek di Git. Terutama karena Git menangani sebagian besar jenis file, bahkan biner, cukup efisien. (Sebagai pengganti built-in Altium SVN omong kosong)
Salah satu alasan utama saya untuk melakukannya adalah bahwa pelanggan saya tidak semua merasa Dropbox cukup aman dan saya membutuhkan sistem cadangan yang dapat saya akses di seluruh dunia, dengan juga beberapa konteks versi pada sebagian besar dari apa yang saya lakukan. Jadi saya mengatur server Git pribadi dan sistem cadangan terenkripsi dan berfungsi dengan baik. Papan, Skema, Kode, Dokumentasi, Laporan, Modifikasi Manual, semuanya dilacak.
Saya biasanya akan membuat Repositori untuk Perangkat Keras, satu untuk Perangkat Lunak dan satu untuk Firmware jika itu adalah proyek besar yang berpotensi berjalan lama, tetapi untuk proyek layanan kecil, contoh atau eksperimen kecil, saya sering memasukkan semuanya ke dalam satu repositori, karena hasilnya kekacauan tidak akan besar.
Di Git Anda dapat menggunakan sub-repositori juga untuk mengintegrasikan Firmware ke proyek Perangkat Keras atau sebaliknya, bahkan jika repositori dikelola secara terpisah.
Untuk proyek yang lebih besar saya juga biasanya menggunakan sistem pelacakan bug untuk melacak masalah dan resolusi, sekali lagi untuk HW dan juga SW, Mantis adalah yang bagus yang dapat digunakan secara gratis.
Untuk revisi perangkat keras yang saya hasilkan Gerbers, atau apa pun yang Anda, ditandai dengan Git Hash untuk revisi itu, Gerbers kemudian adalah satu-satunya hal yang diskrit "kuno" versi dalam folder oleh R01, 02, dll. Karena Anda tidak ingin regenerasi mereka sepanjang waktu, tetapi mereka menghasilkan file sehingga tidak boleh diversi dalam Git sendiri, sungguh (karena perangkat lunak desain Anda harus deterministik dengan menghasilkan konten produksi, atau yang lain ...).
Jika ada sesuatu yang menarik di R01 yang tidak terjadi di R02 (atau sebaliknya), Anda memiliki dua Git Hash yang dapat digunakan untuk membandingkan file sumber, jangan khawatir.
Sebagai catatan akhir, salah satu contoh konseptual proyek, akan memiliki repositori Perangkat Keras, yang juga menampung file "BoardPinout.h". File ini dimasukkan sebagai file versi jauh ke dalam repositori Firmware, yang memiliki beberapa file definisi antarmuka yang dimasukkan dari jarak jauh ke dalam repositori Perangkat Lunak.
Berarti setiap kali saya mengubah beberapa sinyal tanpa memodifikasi fungsionalitas luas proyek HW "memperbarui" BoardPinout, yang kemudian dapat diperbarui dan digunakan dalam Firmware, dan seterusnya.
sumber
1) Ini jelas layak versi skematik / file papan. Bahkan jika Anda tidak dapat melacak perbedaan dengan begitu mudah, Anda memiliki cara yang bersih untuk kembali ke rilis perangkat keras tertentu jika Anda harus bekerja dengan revisi perangkat yang lama.
2) Kami memiliki struktur berikut dalam SVN kami.
/ tag
/ branch
/ trunk / hardware
/ trunk / software / firmware
Jika berlaku dengan lebih banyak sub-folder seperti mungkin / Firmware dan / ConfigTool untuk perangkat lunak dan / mainboard dan / papan anak atau sesuatu seperti itu untuk perangkat keras.
2) Tag dibuat dari sub-folder bukan dari keseluruhan trunk, seperti Tag / Mainboard-v1.2.345. Perangkat keras (yaitu PCB) selalu berisi revisi SVN di sablon sutra atau tembaga untuk memiliki referensi langsung.
4) Ketergantungan antara perangkat keras dan firmware bisa rumit. IMO itu tidak masuk akal untuk menghadapinya di tingkat repositori kecuali meninggalkan komentar yang berguna saat melakukan.
Pertimbangkan untuk mengkodekan perubahan perangkat keras menggunakan pin I / O cadangan. Sesuatu seperti menggunakan 4 pin untuk mengkodekan 16 versi perangkat keras yang berbeda. Kami juga menggunakan input ADC tunggal dengan nilai resistansi berbeda untuk menyandikan versi. Dengan cara ini perangkat lunak dapat "mengetahui" perangkat keras apa yang dijalankannya dan mengubah / menonaktifkan / mengaktifkan fitur tertentu.
sumber