Gömülü sistemler üzerine çalışan birçok kişi projelerinde yazılan programların ilk seferde hatasız çalıştığına çok nadiren denk gelmiştir. Hatasız ve kararlı çalışan bir program yazmak için ihtiyaç duyduğumuz hata ayıklama metodu “debug” olarak isimlendirilir ve her derleyici kendi bünyesinde bu özelliği barındırır. Keil de bu derleyicilerden bir tanesidir. Projelerin kapsamına göre yazılan kodun satır sayısı değişiyor. Kapsamı geniş, senaryosu fazla olan projelerde satır sayısı binlerce olabiliyor. Binlerce satır arasından hatanın kaynağını deneme yanılma yöntemiyle bulmak mümkün olmayacak. Bu durumda debug özelliği ihtiyacımızı sonuna kadar karşılıyor. Bu özellik sayesinde kodda satır satır hata ayıklaması yaparak hataları çözmek ve hızlıca sonuca ulaşmak mümkün. Özdisan Elektronik’in distribütörü olduğu Nuvoton, NU-LINK ve NU-LINK-PRO olmak üzere 2 çeşit debugger çözümü sunuyor. İlerleyen günlerde firma tarafından geliştirilen NU-LINK2 seçeneği de kullanıcılara tanıtılacak. Debug özelliğinin kullanılabilmesi için işlemcinin ve debuggerın “VCC-DATA-CLOCK-RESET-GND” pinlerinin birbirine bağlanması gerekiyor. Aşağıdaki bölümlerde NU-LINK-PRO kullanılarak Keil derleyicisi üzerinden debug ile ilgili kısımlardan bahsedeceğiz.
Keil’de Debug
Keil’de debug özelliğinin aktif olabilmesi için program açıldıktan sonra kısa yol ile CTRL + F5 yapılabilir ya da üst bölümde yer alan “Debug” “Start/Stop Debug Session” adımları izlenebilir.
Debug esnasında programın hangi satırda durması istenilirse o satıra 2 kere üst üste sol click yapılarak “breakpoint” koyulur. Aşağıdaki örnekte program çalışırken 46. satıra geldiğinde duracaktır.
Sol üst kısımda bulunan “RST” seçeneği programa reset atmak, “RUN” seçeneği programı başlatmak, “STOP” seçeneği programı durdurmak, “STEP” seçeneği fonksiyonun içerisine girip satır satır çalıştırmak, “STEP OVER” seçeneği fonksiyonun içerisine girmeden tek adımda çalıştırıp diğer
fonksiyona geçmek, “STEP OUT” seçeneği çalıştırılan fonksiyondan çıkmak için kullanılır.
Debug esnasında değişimi gözlemlenmek istenen değişkenler seçilip sağ click ile “Add ‘değişkenin ismi’ to Watch1” adımı izlenilerek Watch1 penceresine eklenebilir ve buradan takip edilebilir. Bunun dışında “Serial Window” bölümünden hangi uart kanalı aktif edildiyse seçilebilir ve “printf” komutuyla değişimi gözlemlenecek değişkenin değeri bu pencereden takip edilebilir.
Resetsiz Debug Modu
Programın çalışması esnasında beklenmeyen bir resetlenme sorunu meydana gelirse bu özellik sayesinde sorunun kaynağı bulunup çözüm yoluna gidilebilir. Bu modu aktif etmek için yapılması gerekenler;
- “Options for target→debug → Nuvoton Nu-Lınk Debugger Settings → Reset Options →Reset” adımları izlenerek “None” seçimi yapılır.
- “Options for target → Utilities” adımları izlenerek “Update Target Before Debugging” seçeneği iptal edilir.
Bu işlemler tamamlandıktan sonra program çalıştırılır ve beklenmedik şekilde resetlendiğinde resetin neden kaynaklandığına “System Reset Source Register” üzerinden ulaşılabilir. Bu registera ulaşabilmek için Memory Windows üzerinden Memory1 seçilir ve register adresi olan 0x50000004 değeri girilir. Akabinde registerın değeri görülür ve bu değere göre resetin kaynağı tespit edilir.
Aşağıdaki şekilde görüldüğü üzere registerın ilk byte değeri 43’tür. Bu değeri yorumlayabilmek için registerın ilk bytenın hangi tanımlara karşılık geldiğine bakılır. Şekil 8’de bu tanımlar verilmiştir
43 değeri 0,1 ve 6. bitlerin 1 olduğu anlamına geliyor. Buradan yola çıkılarak sistemin reset kaynağının “nRST” pininin low levela çekilmesi olduğu görülüyor. Nuvoton’un sağladığı resetsiz debug özelliği sayesinde resetlenme sorunu tespit edilemeyen birçok proje artık kolayca çözüme kavuşturulabilir hale geliyor.