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.