STM32 çalışmalarımda STM32 Cube IDE platformunu kullanıyorum. ST Microelectronics bunu geçtiğimiz yıllarda bünyesine kattığı Atollic True Studio ile CubeMX yapılandırıcısını birleştirerek oluşturdu. Müşterilerinin kullanımına ücretsiz olarak sunuyor.
Fakat yeni bir ürün, zaman zaman, hatta bazıları ile çok sıklıkla, sorunlarla karşılaşıyorum. Bunların kendimden kaynaklanmadığını anlayana kadar epey ter döküyorum. Zira çoğu ilk defa benim başıma gelmiş oluyor. Forumlarda paylaşıyoruz ve ST den yeni sürümlerde çözüm bekliyoruz.
Bu arada hayat devam ettiğinden kendi çözümlerimizi üretmek zorunda kalıyoruz. Bu yayında karşılaştığım ve henüz çözüm getirilmemiş olan kusurları, bunları aşmak için yaptıklarımı anlatacağım.
Bunları değerlendirirken Mac OS kullandığımı (Ekim 2020 itibariyle Catalina Version 10.15.6) dikkate alınız. Cube IDE sürümü de : 1.4.2 Build: 7643_20200813_1322 (UTC). Windows’ta da durum farklı olabilir.
Cube MX İN PROJEYE AYNI KAYNAK KODUNU BİRDEN FAZLA EKLEMESİ
Cube MX includes duplicate source codes into the project
Bu sorun projeyi sorunsuz olarak oluşturup, bir süre çalıştıktan sonra Cube MX ile konfigürasyon değişikliği yapıldığında karşıma çıkıyor. İstisnasız her projede başıma geliyor. Projede CubeMX ile bir değişiklik yapıp, “Generate code” komutundan sonra derleme yapmaya kalktığımızda aşağıdaki gibi bir hata listesi ile karşılaşıyoruz:
Bunun nereden kaynaklandığını bulana kadar epeyi uğraştım. Forumlarda çok çetrefil çözümler, daha doğrusu işe yaramayan çözümler önerildi. Sonunda her seferinde aynı şekilde aynı dosyanın duplike eklendiğini buldum.
Görüldüğü gibi system_stm32f1xx.c dosyası projeye iki defa ekleniyor. Cube MX her seferinde de aynısını yapmayı ısrarla sürdürüyor.
Bunu ST Community forumda raporlarımı ama bir çözüm gelmedi, pek de öncelik vermediklerini anlıyorum. Benim çözümüm basit :
Derlemeye geçmeden önce Drivers klasörü altındaki ikinci system_stm32F….c dosyasını silmek.
Cube IDE, KOPYALANAN PROJELERİN ORİJİNALİNİN SRC KLASÖRLERİNİ SİLİYOR
Cube IDE deletes source files of original project after cloning.
BU da çok can yakan, çok şikayet alan bir sorun olmasına rağmen henüz çözülmüş değil.
KOPYALA YAPIŞTIR YÖNTEMİ İLE PROJE KLONLAMAK
Mevcut bir projenin kopyasını oluşturarak bu kopya üzerinde yeni bir sürüm ya da yeni bir proje çalışması yürütmek sık kullandığım bir yöntem. Bunu şöyle yapıyoruz:
Project explorer de açık durumda olan orijinal projenin üzerine sağ tıklayarak açılan pencerede “copy” komutunu tıklıyoruz.
Bunu takiben yine project explorer penceresi içindeki boş alana sağ tıklayıp, açılan menüde “paste” seçeceğini tıklıyoruz.
Şimdi karşımıza aşağıdaki gibi bir pencere açılacak:
Burada kopya projeye vereceğimiz isim soruluyor, varsayılan olarak orijinal projenin sonuna bir rakam eklenmiş olarak geliyor. Ben bu örnekte bu ismi kabul ederek devam edeceğim. “copy” düğmesini tıklıyoruz.
Kopya projemiz project explorer de belirdi. Bunu derlemeden önce Cube MX yapılandırıcısının .ioc uzantılı dosyasının ismini de yeni proje ile aynı olacak şekilde değiştirelim ki, CubeIDE içinde yapılandırıcıyı kullandığımızda hata mesajı vermesin.
Artık projeyi sorunsuz bir biçimde “build” komutu ile derleyebiliriz ama yapmayalım ! önce orijinal projemizi sağlama almamız gerek, zira ilk seferde olmasa bile birkaç derleme yapıldığında, arada rasgele bir anda orijinal projenizdeki kaynak dosyaların başta main.c olmak üzere kaybolduğunu görebilirsiniz- büyük olasılıkla.
ÇÖZÜM : KAYNAK KLASÖRLERİNİ KOPYALAYIP SAKLAYIN !!!
Genelde src klasörünün içindeki kullanıcı dosyaları siliniyor, zaman zaman da drivers klasörünün içindeki dosyalar. Bu nedenle, yeni proje üzerinde herhangi bir işlem yapmadan önce mutlaka orijinal projenin src ve drivers klasörlerini kopyalayıp saklıyoruz. CubeIDE bu dosyaları bir defa sildikten sonra orijinal projeye bir daha saldırmıyor. Yani silmesini bekleyip dosyalarınızı yerine koyarsanız, tekrar silmiyor.
Benim masa üstümden böyle yedeklemeler eksik olmuyor.
PROJEDE BULUNMASINA RAĞMEN GÖRÜLEMEYEN KAYNAK DOSYALAR
Cube IDE can’t access already existing source files in the project.
Bu daha seyrek karşılaşılan bir problem, burada anlatabilmek için simüle etmekte zorlandım. Ne zaman ne sebeple oluştuğunu anlayamadım, ama oluyor arada bir.
Bazan bir proje üzerinde bir seri değişiklik, yeniden derleme vb. yaptıktan sonra birden bire bazı .c ve .h uzantılı dosyaların bulunamadığını bildiren hata mesajları almaya başlıyoruz.
Yeni bir proje yaratarak bu sorunu açıklayayım:
ÖNCE SORUNU BİR ŞEKİLDE OLUŞTURALIM
Yeni bir proje başlatıp, sorunsuz biçimde derleyelim.
Biraz uğraşarak sözünü ettiğim problemi sizin için yarattım. Bunu nasıl yaptığım önemli değil, problemin kendiliğinden ortaya çıktığını varsayın.
Derleme işlemi artık aşağıdaki hata listesini veriyor:
Halbuki derleyicinin “undefined reference to …” diye şikayet ettiği tüm dosyaların project explorer penceresinde Drivers klasöründe hala bulunduğunu görebiliyoruz. Ama dikkatli bakınca bu dosyaların sol taraflarındaki “icon”larda bir gariplik olduğu görülebiliyor. “h” ve “c” harflerinin içleri boş.
Drivers klasöründeki “c” harfi de artık yok. Herşey yolunda iken bu klasörün görünümü aşağıdaki gibiydi.
Buradan çıkan sonuç şu: Drivers klasörü bir şekilde “Source Folder” özelliğini kaybetmiş. Oysa CubeIDE, kaynak kodların “Source folder” tipinde klasörlerde bulundurulmasını istiyor.
ÇÖZÜM
Drivers klasörünü tekrar “Source Folder” tipine dönüştürmemiz gerekiyor. Bir klasörün tipinin değiştirilmesinin belki başka bir yolu da vardır, ama ben bulamadım. Ve aşağıdaki yöntemi uyguladım, bu yöntem sorunsuz olarak çalışıyor :
Project explorer de Projenin adının üzerini sağ tıklayarak açılan pencerede New/Source folder seçeceğini tıklıyorum.
Yeni yaratılacak klasörün adını, değiştirmek istediğim ile aynı olarak, yani “Drivers” olarak veriyorum.
Şimdi “Finish” düğmesini tıkladığımızda Drivers klasörünün üzerinde “c” harfinin belirdiğini, içindeki dosyaların da normale döndüğünü görebiliriz.
Şimdi programı yeniden derlediğimizde sorun kalmadığını görebiliriz.
Not : Bu işlem tersine çalışmıyor. Yani “Source folder” tipindeki bir klasörü bu yöntem ile normal klasöre çevirmek mümkün değil. “This folder already exists” şeklinde bir uyarı ile işleme izin vermiyor.