DEFINES / UNDEFINES WITHIN STM32 Cube IDE CONFIGURATION SETTINGS
Kod geliştirirken aynı kodun farklı seçeneklere göre derlenmesini isteyebiliyoruz. Örneğin bu kodun SPI arayüzlü bir ekranla ya da Paralel girişli bir ekranla çalışan tipleri olsun isteyebiliriz.
Ya da geliştirme süresince ekranda bir sürü debug mesajı versin ama kullanıma sürüleceği zaman bunları kapatsın (örneğin Debug ve Release tipleri) isteyebiliyoruz.
Bu durumda belirli bir sürümde istenen komut bloklarını etkinleştirirken, bu sürümde gereksiz ve istenmeyen başka blokları kapatabilmek için #define derleyici tanımlarını kullanıyoruz.
Örneğin #define TFTSPI şeklinde bir tanımlama yaparak ekranımızın tipini seçiyoruz :
Burada SPI girişli bir TFT kullanılacağı tanımlanmış. Bunun için bununla ilgili komut satırları etkinleştirilmiş. Az yukarıda da paralel girişli TFT ye ilişkin satırlar kapatılmış (gölgeli olan kısım). Gerektiğinde de tersi yapılabiliyor.
Bu yayının konusu buradaki PARALLELMODE ya da SPIMODE seçeneklerinin nerede ve nasıl tanımlanarak etkin hale getirileceği.
İLK YAKLAŞIM: #Define ları program kodu içine koymak
İlk akla gelen ve benim de uzun zaman uyguladığım yöntem, seçtiğim bir header dosyası içine #define PARALLELMODE ya da #define SPIMODE şeklinde bir satır eklemek oluyor.
Bunu yaptıktan sonra programın muhtelif yerlerinde
#ifdef SPIMODE
…
…
#endif
şeklindeki bloklar içine bu konfigürasyona yönelik kodlar yerleştirilebiliyor.
Ancak burada sıkıntı çıkartan konu şu ibarede saklı : “seçtiğim bir header dosyası içine”. Peki hangi header dosyası içinde?
Kimisi bu header içinde, öbürü bir başkası içinde.
Oysa bu yaklaşım özellikle çok sayıda program modülleri içinde paylaşılarak kullanılan tanımlar söz konusu olduğunda dağınık ve disiplinsiz bir yöntem oluyor.
Hani söz konusu tanımlama tek bir modül içinde kullanılıyorsa bunu bu modüle ait headere koymakta bir sorun görülmeyebilir.
DİĞER yöntem: TANIMLAMALARI Cube IDE konfigürasyon AYARLARI içinde yapmak
Cube IDE nin bunun için sunduğu çözüm “compiler configuration” başlıklı seçenek. Farklı konfigürasyonlar tanımlayarak aynı kodun farklı tiplerini derlemek mümkün oluyor. Bu seçenek elimizde olunca yukarıda sözünü ettiğimiz tanımlamaları konfigürasyon ayarları içine koyabiliyoruz. Böylece bu tür genel tanımların yeri yurdu belli oluyor.
AYARLARIN YAPILIŞI :
- 1. Project/properties
- 2. C/C++ Build/settings
- 3. tool settings
- 4. MCU GCC Compiler/preProcessor
Buradaki Define ve Undefine pencereleri içine bu konfigürasyona (Debug, release vb.) ait tanımlamalar yazılır.
Yukarıdaki örnekte SPI tipi TFT olarak tanımlanmış. TFT çözünürlüğü de 320×240 olarak seçilmiş. Kapatılacak seçenekler de alttaki pencereye yazılmış. Üst pencerede derlemeye yönelik başka tanımlamalar da var.
Bu yapılandırma TFT_SPI olarak adlandırılan konfigürasyon için geçerli. TFT_PARALLEL adlı bir başka konfigürasyonda da PARALLELMODE seçeceği aktiflenip, SPIMODE seçeceği kapatılıyor.
Derleme (build) komutu öncesinde istenen konfigürasyonun aktifleştirilmesi gerekiyor.
Aktif olacak konfigürasyonu seçmek için üst taraftaki “manage configurations” butonuna basılır. Açılan pencerede istenen konfigürasyon “aktif” hale getirildikten sonra “apply and close” butonu ile çıkılır. Define/Undefine tanımlamalarının etkileri editor penceresinde anında görülür.
Bu yayın da buraya kadar. (S.OZBAYRAKTAR 11 Mayıs 2020)