GPIO işaretleme ile multithread çalışan program analizi

taydin

Timur Aydın
Staff member
Katılım
24 Şubat 2018
Mesajlar
24,930
Gömülü sistemlerde eğer üzerinde çalıştığınız programda birden fazla süreç paralel olarak çalışıyor, veya program ile kesmelerin etkileşimi sonucunda oluşan sorunları analiz etmek istiyorsanız, klasik debugger programlarının yararları çok sınırlıdır, çünkü programı bir satırda durduğunuz anda bütün timing çöker, çünkü bütün süreçler ve kesmeler durur. Debugger bu durumlarda ancak şu işe yarar: Olan olmuş, program çökmüş veya takılıp kalmış bir yerde. Artık debugger'i kullanarak program üzerinde otopsi yaparsınız :) Yani program datalarını inceleyerek oradan bir ip ucu elde etmeye çalışırsınız.

Böyle durumda kullanılabilecek etkili tekniklerden birisi GPIO işaretlemedir. İlgilenilen süreçlerdeki stratejik yerlerde bazı pinleri set/reset edersiniz, sonra da osiloskop ile bu pinlerin durumuna bakıp programın çalışmasını canlı olarak gözlemleyebilirsiniz.

Mesela benim üzerinde çalıştığım program FreeRTOS üzerinde çalışıyor ve şu anda iki tane süreç (Task) ve bir kesme olan kısmına odaklanıyorum. Task1 bir buffer'a veri yazıyor ve bu buffer'in seri porta yazılma işlemini başlatıyor. Yazma işlemi yudum yudum yapılıyor, buffer çok büyük. Kesme ise bir yudum yazılınca Task2 yi tetikliyor, Task2 de buffer'dan ilave veri yazıyor. sonra tekrar bir yudum yazılması gerçekleşiyor, kesme çalışıyor, Task2 yi tetikliyor ve süreç buffer'in tamamının yazılması bitene kadar devam ediyor.

Bu yapının doğru çalıştığını anlamak için Task1, Task2, ve Kesme rutininde üç ayrı GPIO işaretleme kullandım.

Eflatun: Task1 in buffer'a ilk veriyi yazması.
Sarı: Kesme rutini (transmit buffer empty interrupt)
Mavi: Task2 (yeni veri yazıyor)
Yeşil: Seri porttan transmit edilen veri

Dikkat edilirse, transmit buffer empty interrupt'ı son byte yazılırken devreye giriyor, yani orada bir byte'lik bir avanta kazanıyoruz :) Eğer transmit complete interrupt kullansaydım, son byte da yazıldıktan sonra veri ilave edebilecektim.

1706523506320.png
 

Forum istatistikleri

Konular
7,443
Mesajlar
125,440
Üyeler
3,025
Son üye
can.ince

Son kaynaklar

Son profil mesajları

Bir insanın zeka seviyesinin en kolay tesbiti, sorduğu sorulardır.
yapay zeka interneti yedi bitirdi, arama motoru kullanan, forumlara yazan kaldı mı ?
Freemont2.0 herbokolog Freemont2.0 wrote on herbokolog's profile.
nick iniz yakıyor
:D
Freemont2.0 posta Freemont2.0 wrote on posta's profile.
Merhabalar :)
az bilgili çok meraklı
Back
Top