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

taydin

Timur Aydın
Staff member
Katılım
24 Şubat 2018
Mesajlar
21,801
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
 

Çevrimiçi personel

Forum istatistikleri

Konular
5,841
Mesajlar
99,621
Üyeler
2,480
Son üye
mozcelikors

Son kaynaklar

Son profil mesajları

gruptaki arkadaşlara selamlar. sıteyi bu gün fark ettim. Asansör için 2x7 segment LCD gösterge üretmek istiyorum. acaba bu sayfadaki arkadaşlardan destek alabilirmiyim. LCD nin mantık açılımı ektedir.
deneyci wrote on TA3UIS's profile.
Selam.
Amatör telsiz lisansı nasıl alınıyor?
Lisansı olmayanı forumlarına almıyorlar. :)
Bilgi alamıyoruz.
cemalettin keçeci wrote on HaydarBaris's profile.
barış kardeşim bende bu sene akıllı denizaltı projesine girdim ve sensörleri arastırıyorum tam olarak hangi sensör ve markaları kullandınız yardımcı olabilir misin?
m.white wrote on Altair's profile.
İyi akşamlar.Arabanız ne marka ve sorunu nedir.Ben araba tamircisi değilim ama tamirden anlarım.
* En mühim ve feyizli vazifelerimiz millî eğitim işleridir. Millî eğitim işlerinde mutlaka muzaffer olmak lâzımdır. Bir milletin hakikî kurtuluşu ancak bu suretle olur. (1922)
Back
Top