Gömülü sistem geliştirme ve MCU yazılım geliştirme alanlarında mühendisler, programlardaki hataları gidermek için sıklıkla hata ayıklama araçlarını kullanır. Böylelikle mikrodenetleyici programlarındaki hataları tespit edip sayısını azaltabilir ve programların beklendiği gibi çalışmasını sağlayabiliriz. Bazen mikrodenetleyici programlarında hata ayıklama zor olabilir, çünkü bir sistem modülündeki küçük değişiklikler bile başka bir alt sistemde hatalara yol açabilir. Ayrıca, mikrodenetleyici geliştirmede kullanılan hata ayıklama araçları, geliştirme süresi ve hata ayıklama yetenekleri açısından önemli ölçüde farklılık gösterir. Bu makale öncelikle mikrodenetleyiciler için yaygın hata ayıklayıcı türlerini ve bunların nasıl kullanıldığını tanıtmaktadır.
Donanım Hata Ayıklayıcı Nedir?
Donanım hata ayıklayıcı, bir hata ayıklama arayüzü aracılığıyla mikrodenetleyiciyle iletişim kuran ve işlemlerin çalıştırılmasını, duraklatılmasını, izlenmesini ve hatta durumunun değiştirilmesini sağlayan bir araçtır. Başka bir deyişle, hata ayıklayıcı, bir bilgisayar tarafından gönderilen komutları (örneğin USB protokolü aracılığıyla) mikrodenetleyicinin anlayabileceği bir dile (SWD veya JTAG protokolü gibi) çeviren, kodu yükleyen ve yürütmeyi hassas bir şekilde kontrol eden bir cihazdır.
Hata ayıklayıcı türleri
Gömülü yazılım geliştirme, program hatalarını tespit edip düzeltmeye, MCU programlamasına ve daha pek çok işlevi yerine getirmeye yardımcı olan hata ayıklayıcılara ve programlayıcılara büyük ölçüde dayanır. Çoğu yarı iletken veya yonga üreticisi, ürün ekosistemlerini geliştirmek amacıyla kendi MCU’ları için hata ayıklayıcılar geliştirir. Sonuç olarak, piyasada J-Link hata ayıklayıcıları, U-Link emülatörleri, ST-LINK hata ayıklayıcıları ve programlayıcılar dahil olmak üzere çeşitli sınıflandırmalar mevcuttur.
J-Link
J-Link, Alman SEGGER şirketi tarafından piyasaya sürülen JTAG tabanlı bir hata ayıklama aracıdır. Basitçe ifade etmek gerekirse, bu cihaz bir JTAG protokol dönüştürme kutusu olup, USB arabirimi aracılığıyla bilgisayara bağlanan ve JTAG protokolünü kullanarak hedef kartın iç bileşenlerine bağlanan küçük bir USB-JTAG dönüştürme kutusudur. Yazılımdan donanıma çeviriyi gerçekleştirir.

I-jet Trace
IAR Systems tarafından piyasaya sürülen I-jet Trace, geniş bir komut önbelleğine sahip ve USB 3.0 yüksek hızlı iletişim protokolünü destekleyen güçlü bir kod hata ayıklama ve izleme aracıdır. I-jet Trace, en yeni Cortex-M7 çekirdeği de dahil olmak üzere Embedded Trace Macrocell (ETM) modülü ile donatılmış tüm ARM Cortex-M serisi çekirdekleri destekler. ETM, yürütülen her komutu izleyerek geliştiricilerin MCU'nun çalışma zamanı davranışını derinlemesine gözlemlemesine olanak tanır ve tipik hata ayıklama yöntemleriyle tespit edilmesi zor olabilecek önemli hataları ortaya çıkarır.

U-LINK
ULINK, ARM/KEIL tarafından piyasaya sürülen bir hata ayıklama aracı/emülatördür. Şu anda ULINK2 ve ULINK Pro emülatörleri gibi güncellenmiş sürümler mevcuttur. ULINK/ULINK2, emülasyon işlevlerini etkinleştirmek için Keil yazılımıyla birlikte kullanılabilir ve esas olarak Keil yazılımıyla uyumludur. Bu cihazlar, seri kablo hata ayıklama (SWD), geri dönüş saati desteği, gerçek zamanlı izleme ve diğer özellikler için destek sağlar. Geliştirme mühendisleri, RealView MDK'nın hata ayıklayıcısını ULINK2 ile birlikte kullandıklarında, yonga üzerinde hata ayıklama (yonga üzerinde JTAG, SWD ve OCDS kullanarak) ve flash programlamayı rahatlıkla gerçekleştirebilirler.

CMSIS-DAP
CMSIS-DAP, CMSIS ve DAP olmak üzere iki bölüme ayrılabilir. CMSIS, ARM Cortex-M Yazılım Arayüz Standardı anlamına gelirken, DAP ise Hata Ayıklama Erişim Noktası anlamına gelir. CMSIS-DAP, bir USB hata ayıklama cihazı biriminin donanım yazılımı uygulamasıdır. Ana bilgisayarda çalışan hata ayıklama yazılımı, USB arabirimi aracılığıyla hata ayıklama cihazıyla iletişim kurar ve sonuç olarak hedef MCU üzerinde çalışan uygulama yazılımının hata ayıklamasını mümkün kılar. CMSIS-DAP hata ayıklayıcı, JTAG veya SWD aracılığıyla hedef cihaza bağlanır. ARM Cortex işlemciler, Core Sight Debug ve Trace birimleri sağlar. CMSIS-DAP hata ayıklayıcıları, bir veya daha fazla ARM çekirdeği içeren işlemcileri destekleyebilir.

DAPLink
DAPLink, ARM tarafından resmi olarak geliştirilmiş, tüm Cortex-M0/M3/M4/M7 çekirdekli yongalar için program indirme ve hata ayıklama işlevlerine sahip açık kaynaklı bir emülatördür.

ICD Hata Ayıklayıcı
ICD (Devre İçi Hata Ayıklayıcı), genellikle kısaca "ICD hata ayıklayıcı" olarak anılır ve gömülü sistem geliştirme sürecinde kullanılan bir donanım hata ayıklama aracıdır. Bu araç, geliştiricilerin mikrodenetleyiciler veya diğer gömülü cihazların hedef devre içinde (devre içi) çalışırken gerçek zamanlı hata ayıklama işlemlerini gerçekleştirmelerini sağlar.

ICD hata ayıklayıcıları genellikle JTAG (Joint Test Action Group) veya SWD (Serial Wire Debug) gibi hata ayıklama arayüzleri aracılığıyla hedef cihaza bağlanır. Bu hata ayıklayıcılar, kesme noktaları belirleme, kodda tek adımla ilerleme, değişken değerlerini inceleme ve programın yürütme akışını izleme gibi bir dizi temel hata ayıklama özelliği sunar.
ICD hata ayıklayıcılarının en önemli avantajlarından biri, yazılımı gerçek donanım bağlamında hata ayıklayabilme yetenekleridir; bu da geliştiricilerin, yalnızca hedef cihazın amaçlanan ortamında çalışırken ortaya çıkabilecek sorunları tespit etmelerine ve düzeltmelerine olanak tanır.
ST-Link, STM8 ve STM32 mikrodenetleyiciler için özel olarak tasarlanmış bir çevrimiçi hata ayıklama ve programlama aracıdır; genellikle "indirme aracı" olarak da anılır. ST-Link, STM8 veya STM32 mikrodenetleyicilerle iletişim kurmak için SWIM, JTAG ve SWD gibi iletişim arayüzlerine sahiptir (çeşitli sürümleri mevcuttur).

MCU-Link
NXP ve Embedded Artist tarafından ortaklaşa geliştirilen MCU-Link, MCUXpresso IDE ile sorunsuz bir şekilde entegre olan güçlü ve uygun maliyetli bir hata ayıklama aracıdır. Ayrıca, yaygın olarak kullanılan MDK Keil ve IAR Embedded Workbench gibi CMSIS-DAP protokolünü destekleyen üçüncü taraf IDE'lerle de uyumludur.

MCU-Link, yüksek performanslı hata ayıklama için yüksek hızlı bir USB arabirimine sahip LPC55S69 mikrodenetleyicisini temel almaktadır. LPC55S69, 150 MHz'e kadar saat hızına sahip çift çekirdekli bir Cortex-M33 mikrodenetleyicidir. USB-seri (VCOM) işlevselliği sayesinde, geliştiricilerin hata ayıklama sırasında MCU tarafındaki verileri bilgisayara aktarabilmelerini sağlar.
OpenSDA
OpenSDA, hata ayıklama, USB-seri dönüştürme ve sürükle-bırak yoluyla yazılım güncelleme özelliklerini bir araya getiren bir yerleşik donanım hata ayıklama devresidir. Neredeyse tüm NXP ve Freescale resmi geliştirme kartlarında bulunur. OpenSDA, sadeliği, düşük maliyeti, güçlü işlevselliği ve yaygın olarak bulunabilmesi nedeniyle kullanıcılar tarafından tercih edilmektedir.

Nu-Link
Nu-Link, Nuvoton tarafından geliştirilen ve hata ayıklama ile çevrimiçi/çevrimdışı programlama özellikleri sunan bir hata ayıklama ve programlama aracıdır. Bu araç, ana bilgisayara bağlanan bir USB bağlantı noktası, LED durum göstergeleri, bir çevrimdışı programlama düğmesi ve hata ayıklama ile programlama amacıyla hedef yongaya bağlanmak için bir SWD arabirimi içerir (SWD bağlantı noktası varsayılan olarak 5V voltajda çalışır).

Hata ayıklayıcılar nasıl çalışır?
Mikrodenetleyici hata ayıklama ilkesi, hata ayıklama aracı ile mikrodenetleyici arasındaki iletişimi içerir ve bu sayede mikrodenetleyici programının hata ayıklamasını kolaylaştırır. Kesme noktaları, koddaki hataları tespit etmek için yaygın olarak kullanılan hata ayıklama teknikleridir.
Kesme Noktası Koşullarını Belirleme

Yukarıdaki şekilde, toplam dört adet kesme noktası içeren bir liste bulunmaktadır. Kırmızı kutu 1’de gösterildiği gibi, herhangi bir kesme noktasına koşullar atanabilir.
Kırmızı kutu 2'de görüldüğü gibi, bir kesme noktasının kaç kez etkili olacağını, yani o konuma ulaşıldığında kaç kez tetikleneceğini belirtebilirsiniz. Bu örnekte, bir kez tetiklenecek şekilde ayarlanmıştır.
Şekildeki kırmızı kutu 3'te gösterildiği gibi bir değerlendirme ifadesi ayarlayabilirsiniz. Örneğin, "g_iCounter" 100'den büyük veya 100'e eşit olduğunda kesme noktası tetiklenecektir. Bu tür koşullar, mantıksal "AND" ilişkisi kullanılarak kırmızı kutu 2'deki koşul ile birleştirilir. Kesme noktasının tetiklenmesi için her iki koşulun da karşılanması gerekir; aksi takdirde kod çalışmaya devam eder.
Hata noktası tetiklendiğinde, şekildeki kırmızı kutu 4'te gösterildiği gibi bir Python betiği çalıştırabilirsiniz.
Ayrıca, kesme noktası tetiklendiğinde uyarı vermek için bir mesaj kutusu görüntüleyebilir ve/veya bir sesli uyarı verebilirsiniz.
Kesme Noktası Tetikleyicilerini Ayarlama

Kesme noktası tetikleyicileri, yürütme sırasında belirli koşullar karşılandığında kodun durmasına neden olan önceden tanımlanmış tetikleyicilere benzer. Tetikleme konumu önceden bilinmeyebilir.
Şekilde, kırmızı kutu 1, kodda doğrudan bir kırılma noktası ayarlamaya benzer şekilde, kodu belirli bir satırda durduran bir komut tetikleyicisini temsil eder.
Kırmızı kutu 2, belirli bir değişken veya adreste okuma/yazma işlemi olduğunda kodu durduran bir veri tetikleyicisini temsil eder ve belirli bir bitin ayarlanıp ayarlanmadığını izleyebilir (kullanılabilirlik mikrodenetleyiciye bağlıdır). Kod, ilgili konumda durur.
Kırmızı kutu 3, "g_iCounter"ın seçildiği bir örnektir. En yüksek biti 1 olarak ayarlandığında, kesme noktasını tetikler. Aksi takdirde, kod çalışmaya devam eder.
Kırmızı kutu 4, mikrodenetleyicinin yeteneklerine de bağlı olan, birden fazla koşulu içeren karmaşık bir tetikleme koşulunu göstermektedir.
Sonuç
Özetle, donanım hata ayıklayıcılar ve bunların çeşitli türleri, geliştiricilerin yazılım hatalarını tespit edip düzeltmelerine, gerçek zamanlı hata ayıklama yapmalarına ve mikrodenetleyici programlarının yürütülmesi hakkında bilgi edinmelerine olanak tanıyarak gömülü sistem geliştirmede hayati bir rol oynar. Bu araçlar, kesme noktaları, tetikleme koşulları ve komut dosyalarını çalıştırma gibi temel özellikler sunarak hata ayıklama sürecini daha verimli ve etkili hale getirir.



