Embedded sistem GPIO tuş okuma

turkuazaga

Üye
Katılım
23 Aralık 2018
Mesajlar
58
Sitara am35xx kullanan bir gömülü sistemde GPIO lara bağlı birkaç tuşumuz var.
Bir proğram da bu tuşlara baslınca birtakim işlemleri yapacak.
Proğramım şimdi ki halinde 10 milisaniyede bir GPIO'ları kontrol ediyorum.
Çok fazla bir sistem yükü oluşturmuyor %3 gibi. Bu işlemi başka nasıl yapabilirim?
 
Programın linux'ta çalıştığını varsayıyorum. Linux altında çalışan bir programın bu şekilde sürekli "polling" yapması hiç de uygun olmaz.Hem işlemcinin daha fazla ısınmasına sebep olur, hem daha yüksek güç sarfiyatına sebep olur, hem de kritik süreçler için daha az işlemci gücü kalır elde.

O %3 ü de nasıl gördün bilmiyorum ama, orada iki ayrı yüklemeye bakman lazım. User ve kernel. En garanti metot, top programını çalıştırmak ve toplam "idle" yüzdesine bakmak. Bunu yaparsan muhtemelen şaşıracaksın, çünkü %3 ten daha fazla işlemci gücü sarfediliyordur.

Şimdi gelelim bunun en etkili bir şekilde nasıl yapılacağına. İki metot kullanabilirsin.

1) GPIO'ları "interrupt" modda tanımlarsın ve /sys/class/gpio altındaki dosyada bir değişim olmasını beklersin. Bunun için de poll fonksiyonunu kullanabilirsin.

2) Linux kernel'deki gpiokeys sistemini kullanarak, o GPIO'yu bir klavye tuşu gibi sisteme tanıtabilirsin. Bunu yaptıktan sonra artık o GPIO'daki bir değişim, bir klavye tuşuna basılma gibi olacaktır. Klavye ile etkileşim için de ya termios veya ncurses kullanabilirsin.

Bana kalırsa en temiz yöntem ikincisi. Ama iş hayatı bu, herşeyi tam olarak olması gerektiği gibi yapmaya her zaman vakit olmuyor. İşi bir an önce bitirip hemen başka bir işe geçmen gerekiyorsa birinci yöntemi kullanabilirsin.
 
interrpt mod ile ilgili dokümanları inceliyorum.
İnterupt modu etkinleştirildiğinde /sys altındaki dosyayı açıp okuduğumda, herhangi bir değişim olana kadar beni bloke mi edecek?
 
interrpt mod ile ilgili dokümanları inceliyorum.
İnterupt modu etkinleştirildiğinde /sys altındaki dosyayı açıp okuduğumda, herhangi bir değişim olana kadar beni bloke mi edecek?

Hayır bloke etmez. C runtime library'de poll fonksiyonunu incele. Bu fonksiyon ile bekleme yapacaksın. Open ile okumaya kalkarsan GPIO'nun o anki değerini okursun sadece.
 

Çevrimiçi üyeler

Forum istatistikleri

Konular
5,789
Mesajlar
99,024
Üyeler
2,464
Son üye
s4met

Son kaynaklar

Son profil mesajları

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)
Kesici/Spindle hızı hesaplamak için SpreadSheet UDF'leri kullanın, hesap makinesi çok eski kalan bir yöntem :)
Dr. Bülent Başaran,
Elektrik ve Elektronik Mühendisi
Yonga Tasarım Özdevinimcisi
Üç güzel "çocuk" babası
Ortahisar/Ürgüp/Konya/Ankara/Pittsburgh/San Francisco/Atlanta/Alaçatı/Taşucu...

Back
Top