- Katılım
- 24 Şubat 2018
- Mesajlar
- 24,630
Çalıştığım firmware'de, UART üzerinden debug log bilgisi gönderen bir kütüphane kullanıyorum. Firmware'te bir sürü task paralel çalışıyor, yeni özelliklerin istenmesiyle de ilave task'ler eklenince kütüphane ile ilgili bir sorun çıktı. Böyle programlarda klasik debugger lardan elde edilebilecek fayda kısıtlıdır. Ancak olan oldu, firmware çöktü veya takıldıktan sonra debugger ile girip "post mortem" analiz yapabilirsin. Bir nevi kara kutu incelemek gibi. Ama problem nasıl meydana geldi, hangi olaylar, hangi sıra ile meydana geldi anlayamazsınız.
İşte bu noktada 4 kanallı ve derin belleğe sahip bir osiloskop çok büyük bir fayda sağlıyor. debug log sisteminde bir kesme, bir tane kesmenin tetiklediği task, bir de log bilgisi gönderen farklı task var. Bunların hepsinde GPIO işaretleme yaptım. Bir de UART portunun aktif/pasif durumunu yansıtan bir GPIO da kullandım. 4 tane GPIO toplam. Sonra da osiloskobun desteklediği maksimum bellek miktarı olan 7 Mpts ayarını yaptım. Örnekleme hızı 10 Msps ye kadar düştü, ama uç ucuna da olsa bu kesmeleri yakalamaya yeterli oldu.
Bu şekilde programı çalıştırdım. En üst sinyal kesmeler, bir alttaki kesmenin tetiklediği task, bir alttaki UART'ın aktif/pasif durumu, en alttaki de debug log üreten başka bir task. Tekrar tekrar deneyip single capture yapınca en sonunda problem meydana geliyor ve ekranda problemin oluşuna giden zamanda meydana gelen olayları gördüm ve problemi çözdüm.
İşte bu noktada 4 kanallı ve derin belleğe sahip bir osiloskop çok büyük bir fayda sağlıyor. debug log sisteminde bir kesme, bir tane kesmenin tetiklediği task, bir de log bilgisi gönderen farklı task var. Bunların hepsinde GPIO işaretleme yaptım. Bir de UART portunun aktif/pasif durumunu yansıtan bir GPIO da kullandım. 4 tane GPIO toplam. Sonra da osiloskobun desteklediği maksimum bellek miktarı olan 7 Mpts ayarını yaptım. Örnekleme hızı 10 Msps ye kadar düştü, ama uç ucuna da olsa bu kesmeleri yakalamaya yeterli oldu.
Bu şekilde programı çalıştırdım. En üst sinyal kesmeler, bir alttaki kesmenin tetiklediği task, bir alttaki UART'ın aktif/pasif durumu, en alttaki de debug log üreten başka bir task. Tekrar tekrar deneyip single capture yapınca en sonunda problem meydana geliyor ve ekranda problemin oluşuna giden zamanda meydana gelen olayları gördüm ve problemi çözdüm.