我正在使用gpio中斷。我在「/ sys/class/gpio/gpio38/value」中有一個文件。我希望在屬性值發生更改時發出通知。那麼我怎麼才能在用戶空間實現這一點。由於我已經收集了信息,我可以使用select(),poll()或epoll()。那麼這個應用程序哪個是正確的?或者,如果我可以使用/ proc/irq或其他東西,請告訴我。謝謝:)select(),poll()或epoll()?爲sysfs屬性
回答
我發現一些here可能會有所幫助:
GPIO信號有一個像/ SYS /班/ GPIO/gpio42 /(GPIO引腳#42) 路徑並具有以下讀/寫屬性:
「值」...讀爲0(低)或1(高)。如果GPIO 被配置爲輸出,則可以寫入該值; 任何非零值都被視爲高。
如果引腳可以被配置爲生成中斷的中斷 ,如果它已經被配置爲產生中斷(見的「邊緣」的 描述),就可以輪詢(2)在該文件上和 輪詢(2 )只要中斷被觸發就會返回。如果您使用poll(2) ,請設置事件POLLPRI和POLLERR。如果您使用select(2) ,請在exceptfds中設置文件描述符。在 輪詢(2)返回後,將lseek(2)返回到sysfs 文件的開頭,並讀取新值或關閉文件並重新打開它以讀取值 。
儘管它表示它是用於「gpio42」,但我猜這可能適用於您的情況。如果沒有,請在我的回答中留言。
你可以使用它們中的任何一個。這裏的關鍵是,你打開sysfs文件的GPIO線的值(例如/sys/class/gpio/gpio42/value
,然後就可以阻止。
排隊狀態變化信號作爲例外情況,而不是寫(如可能是直覺)。
在選擇的情況下:
fd_set exceptfds;
int res;
FD_ZERO(&exceptfds);
FD_SET(gpioFileDesc, &exceptfds);
res = select(gpioFileDesc+1,
NULL, // readfds - not needed
NULL, // writefds - not needed
&exceptfds,
NULL); // timeout (never)
if (res > 0 && FD_ISSET(gpioFileDesc, &exceptfds))
{
// GPIO line changed
}
請注意,並非所有的GPIO可中斷的。如果GPIO?你正在使用不支持中斷(這將取決於你使用的確切的CPU/SoC),你需要閱讀它periodicall年。 – duskwuff
毫無疑問,這是事實 - 尤其是當使用I2C外設或音頻編解碼器實現GPIO線時。然而,在這種情況下,你永遠不會對它們調用select()''pselect()','poll()'或'epoll()'。 ['民意調查())及其同胞,實際上根本不用投票] – marko
你好@Marko非常感謝你的回覆。你可以給我一個示例代碼來選擇你在上面提到的嗎?實際上我在做的是當我做echo 1> file_name,那麼通知應該打印。這將是非常有益的。 –
- 1. 爲什麼使用select(),當我們有poll()和epoll()時
- 2. Sysfs導出設備屬性
- 3. 如何讀取sysfs屬性
- 4. 在sysfs中創建屬性
- 5. epoll VS select
- 6. Win32 select/poll/eof/ANYTHING?
- 7. epoll/select for mutexes/semaphores
- 8. 爲什麼poll()比select()更好?
- 9. 使用單個文件描述符,select,poll和epoll和...之間是否有任何性能差異?
- 10. Linux中的select()和poll()
- 11. 「defaultValue」屬性爲<select>?
- 12. 無法在sysfs中將屬性權限設置爲0666
- 13. epoll性能
- 14. 如何在netty-all中禁用epoll(並使用poll)4.1.3+
- 15. poll和epoll事件標誌是否兼容?
- 16. Select Comand屬性
- 17. 存儲IP或爲PHP POLL設置cookie?
- 18. epoll的性能值
- 19. 爲「select-object」添加其他屬性?
- 20. SELECT INTO行爲和IDENTITY屬性
- 21. QTimer with asio :: io_service.poll_one()或poll()
- 22. 屬性或屬性
- 23. libuv與原始epoll或IOCP
- 24. jquery select元素有屬性
- 25. LINQ .Select()訪問父屬性?
- 26. Theano導入問題:AttributeError:'模塊'對象沒有屬性'poll'
- 27. Linux驅動程序:ioctl或sysfs?
- 28. tinymce貼HTML標籤<poll poll-id =「'POLL ID'」>
- 29. Linux USB:libusb vs sysfs
- 30. 爲什麼<select>的值屬性沒有設置<select>的值屬性?
感謝@託尼的獅子,這意味着我必須輪詢邊緣文件或值文件 –