STM32 cubeIDE-SWV İLE HATA AYIKLAMA-3

STM32 SWV – printf() KULLANARAK KONSOLA MESAJ GÖNDERMEK

Gömülü uygulama geliştiricileri yazılımlarında hata ayıklamak için, UART üzerinden PC ye mesaj gönderme yöntemini daha ilk “Hello world !” mesajını gönderdikleri gün kullanmaya başlarlar. Genelde, sonrasında da bu böyle devam eder. Bunu C dilinin standard kütüphane fonksiyonu olan printf() i kullanarak yaparız.

Şimdi, SWV araçlarını kullanarak UART bağlantısını devre dışı bıraktığımıza göre, artık printf() mesajlarını da SWV konsollarından birine göndersek iyi olmaz mı?

Bu bölümde printf() çıktılarının SWV ITM Data konsoluna yönlendirilmesini göreceğiz.

Printf() fonksiyonu, varsayılan hali ile çıktılarını stdout’a (Bizim için bu USART1 oluyor.) gönderir. Şimdi biz bunu ITM Port 0 a yönlendirelim ki mesajları SWV ITM Data konsolunda görelim.

İlk bölümdeki kurulum işlemlerinin ve SWV/ITM ayarlarının yapılmış olduğunu varsayıyorum.

Printf(), sys calls.c içindeki _write() fonksiyonunu çağırıyor.

Bu fonksiyon görüldüğü gibi “weak” olarak tanımlanmış. Yani biz kendi kodumuz içinde bunun başında “weak” olmayan değiştirilmiş bir türünü tanımlarsak, bizim _write() fonksiyonumuz öncelik kazanacaktır.

O halde, main.c dosyamızın bize ayrılmış olan “User Code 4” bölümüne aşağıdaki yeni _write() fonksiyonumuzu yerleştirelim.

Test programımıza da aşağıdaki gibi bir printf() satırı ekleyerek b ve c değişkenlerini formatlanmış olarak ITM Port 0 a gönderelim.

printf() i kullanabilmek için stdio kütüphanesine ihtiyacımız var, stdio.h dosyasını main.c başlığında bize tahsis edilmiş olan kısma ekleyelim.

Şimdi programızı derleyerek, debug moduna geçelim. Programımız HAL_Init() adımında beklemedeyken SWV ITM Data konsolunu açarak, kırmızı kayıt tuşuna basalım.

Resume tuşu ile programı koşturduğumuzda printf çıktıları aşağıdaki gibi ekranımızı dolduracaktır.

Önemli : İkinci bölümde anlattığım SWO band genişliği ve overflow konularını göz önünde tutmak gerektiğini hatırlatırım.

SONUÇ

Evet, sadece ST Link V2 üzerinden neredeyse her türlü hata ayıklama çalışmasını yapabilecek duruma geldik. Geriye kesmelerin (Interrupt) izlenmesi -ki SWV/ITM kullanmanın en esaslı yararlarını göreceğimiz konu- ve MCU istatistiklerinin alınması kaldı. Onlar da sonraki bölümlere …

Bu yayının sonu – Selçuk Özbayraktar Ağustos 2020