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

taydin

Timur Aydın
Staff member
Katılım
24 Şubat 2018
Mesajlar
26,089
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 üyeler

Forum istatistikleri

Konular
8,376
Mesajlar
137,561
Üyeler
3,319
Son üye
bsahin26

Son kaynaklar

Son profil mesajları

mechanic ayhanarican mechanic wrote on ayhanarican's profile.
https://www.allmystery.de almanca biliyorsan burada araştır. Yapay zekada çeviriyor gerçi.
Almanların matematik bilgisi daha iyi oluyor.
“Kendi yolunu çizen kişi, kimsenin izinden gitmez.” – Nietzsche
Kim İslâm’da güzel bir çığır açarsa (güzel bir alışkanlık başlatırsa), onun sevabı ve kendisinden sonra ona uyanların sevapları, onların sevaplarından hiçbir şey eksilmeksizin ona da yazılır.
erdemtr55 taydin erdemtr55 wrote on taydin's profile.
Merhaba Taydin bey,
Gruba spms serisi yapıcak mısınız?
ben 3 sargılı toroid ile 2 adet flyback sürücek bir devre yapmayı düşünüyorum.size soracak sorularım vardı?
Mutluluğun resmi illa güzel çizilmiş tablo olmak zorunda değil.Bazen basit bir çizgi,doğru bir renk,yada küçük bir detay
Back
Top