| 2 dk okuma | 24 okunma

Bölüm 2: ESP32-IDF Proje Anatomisi ve Sdkconfig – Sahne Arkasını Yönetmek

ESP-IDF projeleri ilk bakışta dosya kalabalığı gibi görünebilir, ancak bu yapı büyük ölçekli projeleri yönetmek için tasarlanmıştır. Bu yazıda, bir IDF projesinin klasör hiyerarşisini, derleme sisteminin kalbi olan CMake dosyalarını ve işlemci özelliklerini kod yazmadan değiştirmemize olanak sağlayan devasa konfigürasyon aracı menuconfig (sdkconfig) yapısını inceliyoruz.

Bölüm 2: ESP32-IDF Proje Anatomisi ve Sdkconfig – Sahne Arkasını Yönetmek

1. Klasör Hiyerarşisi: Nereye Ne Koymalıyız?

Standart bir ESP-IDF projesini oluşturduğunuzda (örneğin idf.py full-clean sonrası) karşınıza şu yapı çıkar:

  • CMakeLists.txt (Proje kökünde): Tüm projenin nasıl derleneceğini tanımlar.
  • main/ klasörü: Uygulamanızın kalbidir.
  • main.c / main.cpp: Giriş noktası (app_main).
  • CMakeLists.txt (Main içinde): Sadece ana kodun bağımlılıklarını yönetir.
  • components/ (Opsiyonel): Kendi yazdığınız sürücüleri veya kütüphaneleri modüler bir şekilde buraya koyarsınız.
  • build/: Derleme sonrası oluşan binary dosyaların çöplüğüdür. Silinmesi projeyi bozmaz.

2. CMake: Derleme Sisteminin Reçetesi

Arduino'da "Derle" butonuna bastığınızda ne olduğunu bilmezsiniz. IDF'te ise CMakeLists.txt dosyası ile derleyiciye komut verirsiniz.

  • idf_component_register: Bu komut, hangi kaynak dosyaların derlemeye dahil edileceğini ve hangi kütüphanelere (requirements) ihtiyaç duyulduğunu belirtir.
  • Neden önemli? Projenize yeni bir .c dosyası eklediğinizde bunu buraya yazmazsanız, derleyici onu görmezden gelir.

3. Sdkconfig ve Menuconfig: Görsel Konfigürasyon

ESP32'nin yüzlerce özelliğini (CPU frekansı, Flash hızı, Log seviyesi, Wi-Fi kanal ayarları vb.) kodun içine #define yazarak değil, görsel bir arayüzle değiştiririz.

  • Komut: idf.py menuconfig (Veya VS Code'daki "Çark" simgesi).
  • Bu araç, seçimlerinizi sdkconfig adlı bir dosyaya kaydeder.
  • Örnek: "Flash SPI Speed" ayarını 40MHz'den 80MHz'e çekmek sadece bir tık uzağınızdadır.

4. app_main() ve Giriş Noktası

Arduino'daki setup() ve loop() ikilisini unutun.

C


void app_main(void) {
    // Kod buradan başlar
    // Bir sonsuz döngü kurmazsanız program biter ve RTOS task'ı siler.
}

IDF'te her şey bir FreeRTOS Task'ıdır. app_main düşük öncelikli bir görev olarak başlar. Eğer içinde bir while(1) döngüsü yoksa veya bir task oluşturmazsa, işi bittiğinde sistem onu sonlandırır.

5. Proje Oluşturma İpucu: Template Kullanımı

Sıfırdan dosya yaratmak yerine, IDF'in sunduğu şablonları kopyalamak en profesyonel yöntemdir:

  • idf.py create-project-from-example "template/sample_project"
Uzman Notu: sdkconfig dosyası asla manuel olarak elle düzenlenmemelidir! Değişiklikleri her zaman menuconfig üzerinden yapın, aksi takdirde derleme sırasında tutarsızlıklar yaşayabilirsiniz. Ayrıca bu dosyayı .gitignore listesine eklemeyi unutmayın; çünkü her bilgisayarın SDK yolu farklı olabilir.


Ertan Dağdelen

Yazan

Ertan Dağdelen

Brain & Youth Information Worker, Author, .Net, Flutter, AJAX, Arduino & Esp32, Pcb, 3D, Galatasaray, Gemini

Bu yazıyı paylaş

Yorumlar (0)

Bu yazı için yorumlar kapalı.