CMSIS Versiyon Kontrole Girsin Mi?

Başlatan Tagli, 28 Ocak 2020, 21:13:40

Tagli

STM32 projelerimde Cube kullanmıyorum ve register seviyesinde kod yazıyorum. Ancak elbette ST'nin sağladığı header'ları ve gerekli diğer CMSIS header'larını projeme dahil ediyordum. Bunları versiyon kontrol sistemine de dahil ediyorum normalde.

Üzerinde çalıştığım son projede - her ne kadar çok gerekli olmasa da - CMSIS-DSP kütüphanesini de kullanayım dedim. Burada iki seçenek var: DSP kütüphanesi ya kaynak kodu olarak eklenecek ve projenin kalanı ile birlikte derlenecek, ya da ARM'ın önceden derleyip sunduğu statik kütüphaneler ile kullanılacak. Ben statik kütüphane olarak ekledim, böylece kaynak kodu dosyaları ve derleme ile uğraşmama gerek kalmadı.

Kafama takılan soru şu: CMSIS falan gibi bizim yazmadığımız ek kaynaklar (ister kaynak kodu, ister önceden derlenmiş kütüphaneler olsun) versiyon kontrolüne girmeli mi? Yoksa projeyi indirdikten sonra kütüphanelerin son versiyonlarını elle mi kopyalamalıyız?

İlk dikkatimi çeken sorun statik kütüphaneyi barındıran .a dosyasının büyük sayılabilecek binary bir dosya olması. Kendisi yaklaşık 5.4 MB civarında. CMSIS'in her yeni versiyonu çıktığında bu dosyayı güncellersem git reposu gereksiz yere şiştikçe şişer.

Aslında header dosyaları da baya büyük ve çoğu da kullanılmıyor (kullanılmayanlar silinebilir belki). Bu durum yine de çok ciddi bir sorun olmuyor çünkü git gibi versiyon kontrol sistemleri text dosyalarının sadece değişen yerlerini saklıyorlar. Yani yer açısından ciddi bir sorun yok. Yine de olası bir CMSIS versiyon yükseltmesi, commit'lerde anlamsız bir şekilde binlerce satırın değiştiğini gösterecektir. Bu da çirkin bir durum bence.

Sizce doğru yaklaşım ne olmalı? CMSIS header ve lib klasörlerini boş bırakıp versiyon kontrolden hariç tutmalı ve projeyi klonladıktan sonra CMSIS'in son versiyonunu elle mi yerleştirmeliyim olması gereken klasörlere?
Gökçe Tağlıoğlu

Elektroemre

Kodlar lokalde değilde github'da ise, arm ın kendi reposundaki ilgili versiyon kütüphaneyi linkleyin. Ben genelde bu tür dosyaları versiyon kontrolde tutmuyorum. Readme dosyasına ilgili kütüphanelerin versiyonlarını not alıyorum LwIP 2.1.2, CMSIS 5.4.0 gibi.

JKramer

Bence versiyon kontrolde olmalı. Projede önemli olan, kullanılan kütüphanelerin "o" versiyonlarıyla düzgün çalışıyor olmasıdır; her kütüphane geriye dönük uyumlu olmayabilir, bu yüzden son versiyon sıkıntı çıkartabilir. Commit olayı da sorun değil, versiyon yükseltme (ve gereken düzenlemeler) tek commit'te yapılabilir.

brandice5

Bence projedeki build sonrasi output dosyalari haric hersey (md, txt, pdf) versiyon kontrole girmeli.
Zaten versiyon kontrolun bir amacida projeyi lokalde checkout veya clone ettikten sonra baska birseye gerek kalmadan tek tusla build etmek.

muhittin_kaplan

cmsis den bağımsız olarak, projeyi etkileyecek tüm dosyaları versiyonluyorum ben.
python üzerinden örnek vereyim,
yazdığım app da yeni bir sürüme geçtiğim bir modül varsa, ve bu modüle çağrı yapıyorsam versiyonluyorum. modülde değişiklik mi oldu, yeni bir sürümüne mi geçtim, versiyonluyorum.

qeek

Hocam githubta submodule diye bir sistem var. Siz başka kütüphaneleri eklemiyorsunuz sadece linklerini submodule olarak veriyorsunuz kuracak adamda kurar iken gerekli dosyaları çekiyor. İncelerseniz güzel olur.

Tagli

Teşekkürler arkadaşlar. Görülen o ki bu konuda farklı görüşler var, ama çoğunluk versiyon kontrole alınmasından yana gibi gözüküyor. Buradaki en belirgin sorun, CMSIS her güncellendiğinde reponun 5 MB daha şişecek olması ama alternatif olarak CMSIS'i kaynak kodu olarak da ekleyebilirim (bilmiyorum bu iyi bir fikir mi...). CMSIS zaten çok sık güncellenmiyor. Ayrıca her güncellemeyi uygulamak zorunda da değilim. Eskiden de öyle yapıyordum aslında, ST'nin sunduğu header, startup dosyaları ile birkaç CMSIS-Core dosyasını bir kez ekleyip bir daha da güncellemiyordum. Ama DSP kütüphanesini ekleyince bu durum dikkatimi çekmeye başladı. İşin garibi, CMSIS versiyonu ilerledikçe adamlar kütüphanenin klasör yapısını da değiştirmişler.

git submodule kullanımı aklıma geldi. Ama anladığım kadarıyla o sistem ile, github veya benzeri bir yerdeki repoyu kendi repomuzun altında bir yere olduğu gibi klonluyoruz. Ancak CMSIS reposunda bir dolu alakasız dosya da var. Bunların ayıklanması gerekiyor. Ek olarak, CMSIS reposu ile gelen Device klasörü anladığım kadarıyla bir çeşit template gibi, yani örnek kodları içeriyor (yanılıyor olabilirim). Bunun ST tarafından verilen dosyalarla değiştirilmesi gerekiyor. Ben şimdiye kadar CUBE paketini indirip onun içinden kopyaladım bunları hep. Bilmiyorum, git submodule ile CMSIS'i klonlayıp sonradan ek bir betik ile dosya ayıklama işlemi yapılabilir mi...

Sanırım şimdilik @Elektroemre 'nin dediği gibi yapacağım ve dosyaların yerlerini hazır edip klasörlerin içini boş bırakacağım. Çünkü bir kez eklersem bir daha silme imkanım olmayacak. Duruma göre CMSIS'i versiyon kontrole sonradan ekleyebilirim.

Bu arada bu soruyu stackoverflow'da da sordum. Oradaki ilk sorum oldu  :) Bakalım ne cevaplar gelecek.
https://stackoverflow.com/questions/60010580/should-cmsis-libraries-be-included-in-version-control
Gökçe Tağlıoğlu