Açık Kaynak ARM Geliştirme Ortamı – VS Code/CMake/GCC/OpenOCD/Nuvoton

  • 2 ay önce, Baran EKREM yazdı.
  • 0 Yorum
  • 678 Kişi Okudu


Uzun süre çeşitli MCU’lar IDE’ler ve çeşitli derleyiciler kullanmış biri olarak geliştirme ortamının mikrodenetleyici programlayan biri için en önemli şey olduğunu söyleyebilirim. Özellikle 8-biti hariç tutup 32-Bit ARM tabanlı mikrodenetleyiciler ile çalıştığınızda farklı geliştirme ortamları ve derleyiciler ile çalışmak platform bağımsızlınızı ve esnekliğinizi kısıtlıyor. Uzun süre çeşitli geliştirme ortamlarını kullandıktan sonra Visual Studio Code önerisi almam üzerine bu editörde geliştirme ortamı kurmaya karar verdim. VS Code aslında kapsamlı bir Editör olsa da bazı eklentiler ve harici derleyici kurulumu ile hem bir derleme ortamı hem de hata ayıklayıcı özelliği kazanabiliyor. Bu  yazıda VS Code ve GCC kullanarak ARM tabanlı mikrodenetleyiciler ile geliştirme ortamı kurulumunu tamamlayıp sonuçlar üzerinden karşılaştırma yapalım. O halde lafı daha fazla uzatmadan kuruluma geçelim.

1) Editör Kurulumu

Editör kurulumu için doğrudan Microsoft sitesi üzerinden VS Code’u indirip kurulum yapalım. Kurulum yapıldıktan sonra oldukça faydalı olacak bazı eklentiler mevcut. VS Code’un sol bölümünde bulunan eklenti sekmesinden bunları kolayca yapabilirsiniz.

Öncelikle C/C++ve CMake için aşağıdaki eklentileri kuruyoruz. Bu eklentiler “C/C++ Themes” ile birlikte paket olarak “C/C++ Extension Pack” adıyla mevcut. Dilerseniz bunu da kurabilirsiniz.

  • C/C++
  • CMake
  • CMake Tools

Özellikle Startup ve Linker dosyasındaki ifadelerin tanınıp renklendirilmesi için “Arm Assembly”  ve “LinkerScript” eklentileri de mevcut. Bu kurulumları da yaparak geliştirme aşamasında rahat edebilirsiniz.

Hata ayıklama (Debug) işlemleri için ise Cortex-Debug adlı eklentiyi kuruyoruz fakat burada çok önemli bir nokta mevcut. Bu eklentinin farklı kaynaklarda da önerildiği üzere 1.2.2 sürümü kurulmalı. Güncel sürümde problemler mevcut. Farklı bir sürümü kurmak için aşağıdaki şekilde bir yol izleyebilirsiniz.

Son olarak seri port ile çalışıyorsanız harici bir uygulamayı aradan çıkartacak “Serial Monitor” eklentisi mevcut.

2) MinGW & Make Kurulumu

Make işlemleri için MinGW kullanılabilir.  MinGW Yükleme Aracını kurduktan sonra içerisinden aşağıdaki paketleri yükleyebilirsiniz. “MinGW Installation Manager” adlı programı buradan indirebilirsiniz.

İlgili paketleri yükledikten sonra sistem “make” yazılımını “mingw32-make.exe” olarak yükleyecektir. Kolaylık olması adına bu programın adını “make.exe” olarak yüklenen dizinden değiştirin. Standart kurulumda bu program “C:\MinGW\bin” dizinine kurulur.

İlgili dosya yolunun uzantısının sistem değişkenlerinde olduğundan emin olun. Eğer bulunmuyorsa Path adın yeni bir değer olarak “C:\MinGW\bin” değerini tanımlayın. Bu işlemlerden sonra herhangi bir problem yok ise komut satırından make programına erişebiliyor olmanız gerekir.

3) Derleyici Kurulumu

Derleyici olarak açık kaynak olan “GNU Arm Embedded Toolchain” kurulumunu yapıyoruz. Benim şu an yüklediğim sürüm 10.3-2021.10 versiyonu. Kurulumdan sonra ilgili dosya yolu “C:\Program Files (x86)\GNU Arm Embedded Toolchain\10 2021.10” olarak kurulacaktır.

4) Derleyici Kurulumu

Eğer STM32 veya farklı markaların ürünleri ile çalışıyorsanız OpenOCD’yi kullanmış olabilirsiniz. OpenOCD Nuvoton tarafında NuEclipse paketinin içinde hazır olarak mevcut. Kolaylık olması adına ben bunu kurarak kurulumun içinde sadece OpenOCD’yi kullandım. Bu kurulumda OpenOCD içerisinde bulunan bazı gerekli dosyalarda mevcut olduğundan basit olacağını düşünüyorum. NuEclipse kurulumu için buradan “NuEclipse (GCC)” kurulumunu yapıyoruz. Bu sayede C:\Program Files (x86)\Nuvoton Tools dizinine OpenOCD de kurulmuş olacak.

5) Proje Oluşturma

VS Code projesi açmak için program içerisinden bir şey yapmanıza gerek yok. Sadece yeni bir klasör açıp kaynak dosyalarınızı ve kütüphanelerinizi bu klasörün içine ekleyin. Dosya isminin proje ismi olacağını unutmayın. Ben örnek olarak Nuvoton M032SE3AE kodlu mikrodenetleyiciye göre proje oluşturacağım. Bu mikrodenetleyici ARM Cortex M0 çekirdeğe sahip Nuvotonun M031 ailesinden. Bu yüzden ilgili mikrodenetleyici’nin temel “Register” ve çeşitli yardımcı dosyaları için Nuvoton’un sağlamış olduğu “M031_Series_BSP_CMSIS” dosyasından ilgili dosyaları proje klasörüne kopyalayacağız. Kendi çalışma dosyalarınızda bulunacağı “src” ve “inc” olarak 2 klasör ekleyebilirsiniz. Derlenmiş çıktı dosyalarının bulunacağı bir “build” klasörü, VS Code için çeşitli ayar dosyalarının bulunacağı “.vscode” adlı bir klasör ve debug aşamasında gerekli olabilecek SVD dosyasının bulunacağı “target” adlı bir klasör açabilirsiniz. Bu SVD dosyasını İlgili mikrodenetleyici ailesi için yayınlanan .packs uzantılı dosyayı Winrar ile açarak elde edebilirsiniz.

Derleme işlemi için C/ASM/C++ derleme işlemlerini gerçekleştirecek “GNU Arm Embedded Toolchain” dosya yolu ve ilgili tanımların olacağı bir “arm-none-eabi-gcc.cmake” dosyasına aşağıdaki gibi tanımlamalar yapıyoruz.

Daha sonra asıl make işlemleri için gerekli olan dosya yolları ve tanımlarının yapılacağı “CMakeLists.txt” dosyası oluşturarak “linker”, “asm startup”, kaynak dosyaları ve çeşitli derleyici ayarlarını yapacağız.

Öncelikle oluşturduğumuz “arm-none-eabi-gcc.cmake” dosyasını belirtiyoruz.

Daha sonra proje ismi ve çıktı isimlerini tanıtarak “linker” dosyasını belirtip bu kısmını tamamlayalım. Benim kullandığım mikrodenetleyici 128 kByte ROM’a sahip olduğundan “gcc_arm_128k.ld” adlı dosyayı kullandım.

Projede bulunan startup dosyası ASM olduğundan projede ASM derleyicisini de C derleyicisine ek olarak aktif kullanacağımızı belirtelim.

Kullanacağımız “.c” ve “.S” uzantılı kaynak dosyalarını belirtiyoruz.

Proje içerisinde bulunan “.h” uzantılı başlık “Header” dosyalarının bulunduğu dizinleri belirterek bu kısmı da tamamlayalım.

Derleme ve Link parametreleri ile ayarların yapıldığı bölümü de aşağıdaki gibi tanımlayalım. Eğer ek olarak farklı parametreler geçmek isterseniz bu kısımdan gerekli düzenlemeyi yapabilirsiniz.

Son olarak çıktı alacağımız dosyaların hangileri olacağını belirtelim. Lazım olacağını bildiğim için .hex uzantısına ek olarak .bin uzantısını da çıktıya ekliyorum.

İlk derleme işlemi için terminalden build dosyasını seçip o dizine geliyoruz.

Bu aşamada Makefile oluşturmak için CMake’i çalıştıralım cmake -DCMAKE_MAKE_PROGRAM=make.exe -G "Unix Makefiles" ..

Derleme işleminin gerçekleşmesi için make komutunu girerek işlemi tamamlayalım. Böylece .hex/.bin dosyalarının oluştuğunu build dosyası içerisinde görebileceksiniz.

Özetle ilgil işlemleri Windows ve Linux ortamında yapmak için aşağıdaki komutları kullanabilirsiniz.

Windows

Linux

Derleme işlemlerinin daha pratik yapılması adına kısal atamak için VS Code’da bulunan imkanları kullanabilirsiniz. Örneğin “Build” işlemi için CTRL+SHIFT+B ile derleme yapabilmek için daha önce oluşturduğumuz .vscode dosyasına “tasks.json” adlı bir klasör açıyoruz ve aşağıdaki şekilde cmake --build .  komutunu çalıştıracak halde düzenliyoruz. Ek olarak temizleyip yeniden oluşturmak için “Clean & Build” komutunu da bu sayfaya dahil edebiliriz.

6) Yükleme İşlemleri (Download/Program)

Derleme işlemlerinden sonra yükleme işlemi için programlayıcının arayüzüne parametre olarak derlenen “.bin” uzantılı dosyayı parametre geçmek gerekiyor. Bu işlem Nuvoton için olsa da farklı mikrodenetleyiciler için farklı yükleme şekilleri olabilir. Bunu yapmak için “NuLink Command Tool” adlı yazılımın Nuvoton’un sitesinden edinebilirsiniz. Yükleme yaptıktan sonra aşağıdaki “.cmd” uzantılı bir dosya oluşturarak basitçe yapabiliriz. Önce silip sonra APROM bölümünü programlamak için aşağıdaki komutlar yeterli olacaktır. Yükleme işlemi sonrasında reset atılarak yüklenen program çalışmaya başlayacaktır.

Bu dosyayı VS Code içerisinden çalıştırmak için “tasks.json” dosyasına yeni bir bölüm ekliyoruz. Bu bölüm sayesinde derlenen proje içerisinde “.bin” uzantılı dosyayı mikrodenetleyiciye yüklemiş oluyoruz.

Bu işlemleri tamamlayıp dosyayı kaydettikten sonra CTRL+P ile arama bölümünü açıp “task” yazıp bir boşluk bıraktığımızda tanımladığımız işlemler çıkacaktır. Burada istediğimizi seçerek ilgili komutları çalıştırabiliriz. Bu sayede işlemler oldukça pratik hale gelmiş olacak.

Burada “Download” kısmını çalıştırırsanız yükleme işlemi çıktısı terminalde aşağıdaki gibi gözükecektir.

7) Hata Ayıklama İşlemleri (Debug)

Hata ayıklama işlemleri için derleme olduğu gibi yine bir “.json” uzantılı olan “launch.json” dosyası oluşturup bazı ayarlar belirtilir. Bu ayarlar OpenOCD ayarları, mikrodenetleyici belirtmesi ve .svd uzantılı dosyanın tanıtılması gibi basit işlemlerdir.

Eğer yükleme işlemini yaptıysanız üst menüde bulunan “Run” -> “Start Debugging (F5)” ile hata ayıklama moduna geçebilirsiniz. Aşağıda görüldüğü gibi üst kısımda bir hata ayıklama kısmı açıldı. Burada yeniden başlatma durdurma ve adım olarak ilerletme mevcut.

Bu aşamada ihtiyacımız olan kısımlar bitsede bazı ek işlemler ile pratiklik sağlayacak özellikler eklemek mümkün. Derleyicinin tanınması ve ilgili fonksiyon/tanım vb. ifadelerin kaynaklarının görüntülenmesi için önce “kit” tanımı ve seçimi yapıyoruz. Bunun için “cmake-kits.json” adlı bir dosya açıp aşağıdaki şekilde cmake dosyasını gösteriyoruz. Sonrasında ise kit seçimi yaparak bu dosyayı seçiyoruz.

Yine benzer şekilde C/C++ aracını tanıtmak için “c_cpp_properties.json” adlı bir dosya açıp içerisini aşağıdaki gibi düzenliyoruz.

 

Evet artık tamamen açık kaynak şekilde platform/marka bağımsız olarak ARM geliştirebilecek bir ortama sahipsiniz. VS Code geliştirme için oldukça ferah ve esnek bir arayüze ve kullanıma sahip. Tüm yazılım geliştirme topluluklarının önerdiği gözde IDE/Editor araçlarından birisi denebilir. Mecbur kalmadığım sürece ARM tarafında VS Code’u çok uzun süre kullanacağım gibi gözüküyor. İlgili çalışmanın tüm dosyaların GitHub adresim üzerinden erişebilirsiniz. Şimdilik bu kadar diyerek bir sonraki yazıda görüşmek üzere diyelim.

Esen kalın.

 

Bazı Yararlı VS Code Ayarları

  • VS Code proje ağacında bir dosyayı tıkaldığınızda dosya yolu tamamen açılıyorsa kapatmak için “AutoReveal” özelliğini “false olarak seçiyoruz. (Kaynak)

 

Kaynaklar

Visual Studio Code for C/C++ with ARM Cortex-M: Part 1 – Installation

Bir Yorum Yazın