STM32 CubeIDE – PROJEYE LINK VEREREK HARİCİ DOSYA EKLEMEK

Oluşturduğumuz yeni projelere daha önceki projelerimizden aldığımız dosyaları kopyala-yapıştır tekniği ile eklemeyi önceki yayınlarımda anlatmıştım. “Programa kaynak kodu eklemek” başlıklı yazım için burayı tıklayabilirsiniz. Aslında burada da, yazının amacı bu olmamakla birlikte, aynı işi kopyala yapıştır yöntemi ile değil de Import fonksiyonu ile yapmayı anlatmış oluyorum.

Bir süre sonra aynı kaynak kodlarını bir çok programımızda kullanır duruma geliyoruz. Ancak bu durumda karşımıza ciddi bir sorun çıkıyor. Türlü çeşitli yerlere kopyaladığımız bu kod bloklarında zaman zaman değişiklikler, iyileştirmeler yapmamız gerekiyor. Bu da aynı adı taşıyan kaynak kodların çeşit çeşit versiyonları ile ortalığa saçılmasına yol açıyor. Hangisi en son sürüm, hangisinde hangi hatalar hala duruyor bilemez hale geliyoruz.

Örneğin, TFT ekran sürücü tft_basic.c ve tft_basic.h kodlarımı neredeyse tüm programlarımda kullanıyorum. Her birine ayrı ayrı kopyalanıp yapıştırılmış olarak. Yeni programlar üzerinde çalışırken sürekli olarak bu sürücülere de yeni özellikler, fonksiyonlar ekliyor, mevcut fonksiyonlarda değişiklikler yapıyor, karşılaştığım hataları temizliyorum. Böylece eski kopyalar ile yenileri arasında ciddi fark ve uyumsuzluklar oluşuyor, işin içinden çıkılmaz hale geliyor.

SÜRÜM KONTROL SİSTEMİ – VERSION CONTROL SYSTEM (VCS)

Önceleri böyle pek çok yerde kullandığım kaynak dosyaların isimlerine uzantı olarak R1, R2 gibi sürüm noları verdim, tarihler eklemeyi denedim, ama olmadı.

Bu sorunun profesyonelce çözümü bir Sürüm Kontrol Sistemi (Version Control System-VCS) uygulamak. Kullanabileceğimiz bir sistem olarak karşımıza yaygın kullanımı ile GIT çıkıyor.

Github aboneliği ile ücretsiz olarak yararlanabileceğimiz bu servisi, uzun zaman bir dosya paylaşım platformu olarak kullanmıştım. Artık asıl amacına yönelik kullanmanın zamanı geldi.

GIT Hakkında bir not : Aslında GIT uygulamasını kendi bilgisayarımıza yükleyerek, GITHUB gibi bir GIT hosting hizmet sağlayıcıya işimiz düşmeden de kullanabiliriz. Ancak bu, tek başımıza çalıştığımızda geçerli bir yaklaşım. Bir takım çalışması yapacak isek kodlarımızı GITHUB gibi bir hizmet sağlayıcı sunucusu üzerinde tutmak zorundayız.

Ancak bu yayının konusu GIT kullanarak sürüm kontrolu yapmak değil, onu anlatan çok güzel eğitim materyalleri var. Onun bir önceki adımını ele alacağım.

Bu yazıda, her seferinde kaynak dosyaların yeni bir kopyasını kullanmak yerine, bu dosyaları bir havuzda tutarak paylaşma yöntemini anlatacağım.

HAVUZDAKİ ORTAK DOSYALARA ERİŞEREK KULLANMAK

Adına ister havuz diyelim, ister kütüphane, ister repository; paylaşılan kaynak dosyaların tek kopyasını tüm uygulamalarımızda kullanmak üzere STM32 CubeIDE ‘ nin Import fonksiyonunu kullanacağız.

Örneğin, yeni oluşturduğumuz örnek projemize tft_basic.c/h dosyalarını, link vererek nasıl ekleyeceğimizi adım adım görelim.

Öncelikle projelerimin paylaşmasını istediğim ortak dosyaları Workspace içinde oluşturduğum “Havuz” adlı klasöre koyuyorum:

Artık Projemiz üzerinde çalışmaya geçebiliriz. “Linked file example” adlı bir proje yaratarak işe başladık.

Projemizi yukarıdaki gibi oluşturduk, main.c içinden TFT ekranı kullanmaya kalktığımızda henüz TFT sürücü dosyalarını katmamış olduğumuzdan hata mesajı alıyoruz.

TFT sürücülerimizi Drivers klasörüne koymak üzere ilerleyelim. Drivers klasörünü yukarıda görüldüğü gibi seçip üzerine sağ tıkladığımızda çıkan menüden Import seçeceğini tıklıyoruz. Ardından File System seçeneği:

Şimdi projeye ekleyeceğimiz TFT sürücüsünün bulunduğu TFT_Basic klasörünü bulalım. Başta da belirttiğim gibi, bu klasörü ortak dosyaları bulundurduğum “Havuz” adlı üst klasörde tutuyordum.

From Directory kutusu boş olarak belirdi. Browse seçeneği ile dosya sistemimize girelim:

TFT_Basic klasörümüzü bulup seçtik. Open‘i tıklıyoruz.

Açılan bu pencerede yeni projemize bağlamak istediğimiz klasör ile içindeki dosyaları seçiyoruz. Yeni projede de “TFT_Basic” klasörü ile birlikte görünmeleri için “Create high level folder” kutucuğu işaretlenmeli. Aksi halde TFT_Basic klasörü olmadan içerisindeki dosyalar tek tek eklenir. Biz bu dosyalar klasörleri ile birlikte gelsinler istiyoruz, öyle dağınık olmasınlar.

Bu kadarı ile Finish‘e basarsak, dosyalar link ile bağlanmaz, kopyaları projemize eklenir. Yani bir başka yayında anlatmış olduğum kopyala-yapıştır yönteminin alternatifi.

Advanced butonunu tıklayarak alt seçeneklerin belirmesini sağlayalım. “Create link locations in” kutusu içinde “PROJECT_LOC” seçeceğinin bulunmasına dikkat edelim. Bu şekilde projemizin bulunduğu klasöre bağlı “Relative Variable” linkler kurulacaktır.

Eğer projenin bulunduğu yerden bağımsız mutlak bir klasöre link vermek istiyorsak “Create link locations in” kutucuğundaki check işaretini kaldırmak gerekir.

Ekran görüntüsü yukarıdaki gibi olsun. Ve finish‘i tıklayalım.

Şimdi TFT_Basic klasörü içindeki tüm dosyalar ile birlikte yeni projenin Drivers klasörü altında belirdi.

Dosyaları projemize bu şekilde bağlayınca, fiziksel olarak proje dosyaları arasına kopyalanmıyorlar. Sadece bulundukları yere linkler veriliyor. Bunu gözlemek için File Explorer ile projemizin Drivers klasörüne bakarsak orada “TFT_Basic” adlı bir klasörün bulunmadığını görürüz:

Bir deneme daha yapalım, TFT_Basic klasörünü sağ tıklayarak “delete” seçeceği ile projemizden silmeye çalışalım :

Gördüğümüz gibi, bunu yaparsak sadece linkin kaldırılacağını, havuzdaki orijinal dosyanın silinmeyeceğini hatırlatan bir uyarı mesajı alıyoruz.

PROJEYE LINK İLE BAĞLI DOSYALARI GÖRMEK

STM32 CubeIDE de Project explorer penceresinde projeye linkler ile katılmış olan dosyaların ikonlarının sağ alt köşelerinde minik oklar bulunur.

Linklenmiş dosyaları ayrıntılı olarak görüp üzerlerinde daha fazla işlem yapabilmek için Project/Properties üzerinden ulaşabileceğimiz bir pencere var:

Burada hem link ile katılmış tüm dosyaları toplu halde görebiliyor, hem de seçtiğimiz dosyaların linkleri üzerinde işlemler yapabiliyoruz. Örneğin Relative olarak verilmiş olan linkleri Absolute-mutlak‘a çevirebiliyoruz.

PATH TANIMLARI

İşimiz henüz bitmiş değil. Projede yeni eklediğimiz dosyalara erişim sağlayabilmek için Path tanımlarını da yapmamız gerekiyor, bunlar otomatik olarak yapılmıyor. Bunun için Project/Properties üzerinden aşağıdaki pencereye ulaşıp Path ekleme butonuna (+ işaretli olan) tıklıyoruz:

Kutunun içine yeni klasörümüzün adresini yazıp -ya da File System/Workspace içinde arayıp seçerek- OK tıkladığımızda:

Apply and Close butonuna basarak işlemimizi tamamlıyoruz. Artık programımızı derleyebiliriz.

SONUÇ

Bu yöntem ile projelerimizin ortak dosyalarını ayrı ayrı kopyalar halinde değil de, tek kopya halinde belirli bir yerde bulundurabiliyoruz. Böylece bu dosyalarda değişiklik, hata giderme, ekleme yaptığımızda tüm projelerimize yansıtılmış oluyor.

ST nin Repository ler altında bize verdiği örnek projelerde de bu linklenmiş yapının yer aldığını görürüz. Örneklerde ortaklaşa kullanılan dosyalar tek bir yerde olur, bu dosyalar projelere link verilerek katılmış durumda bulunurlar. Örnekleri yeni projelerimde kullanmaya kalkıştığımda, iç içe bir sürü klasörü temizlemek için ayıklama yapmak zorunda kaldığım bir durum bu.

Ortak dosyaların sürüm kontrolu konusunda bir adım atmış olduk. Bir sonraki adım GIT kullanmak olacak.

Dikkat edilmesi gereken bir nokta var: Bu dosyalarda yapacağımız değişiklikler diğer projeler ile uyumlu olmayabilir. Geriye dönük testler yapmakta fayda var. Projeleri elden geçirip onlarda da gereken düzeltmeler yapılmak zorunda.

Bu yayının sonu – Selçuk Özbayraktar Temmuz 2020