Tôi đang làm việc với các ngắt gpio. Tôi có một tập tin trong "/ sys/class/gpio/gpio38/value". Tôi muốn có thông báo bất cứ khi nào có thay đổi trong thuộc tính giá trị. Vậy làm thế nào tôi có thể đạt được điều này trong không gian người dùng. Vì tôi đã thu thập thông tin, tôi có thể sử dụng select(), poll() hoặc epoll(). Vì vậy, đó là chính xác cho ứng dụng này? Hoặc xin vui lòng đề nghị tôi nếu tôi có thể sử dụng/proc/irq hoặc một cái gì đó. Cảm ơn :)select(), poll() hoặc epoll()? cho thuộc tính sysfs
Trả lời
Tôi đã tìm thấy một cái gì đó here mà bạn có thể giúp đỡ:
tín hiệu GPIO có con đường như/sys/lớp/gpio/gpio42/(đối với GPIO # 42) và có đọc sau/ghi thuộc tính:
"giá trị" ... lần đọc là 0 (thấp) hoặc 1 (cao). Nếu GPIO được định cấu hình làm đầu ra, giá trị này có thể được viết; bất kỳ giá trị khác không được coi là cao.
Nếu pin có thể được cấu hình như ngắt-tạo ngắt và nếu nó đã được cấu hình để tạo ra ngắt (xem mô tả của "cạnh"), bạn có thể thăm dò ý kiến (2) trên tập tin đó và cuộc thăm dò (2) sẽ trở lại bất cứ khi nào ngắt được kích hoạt. Nếu bạn sử dụng thăm dò ý kiến (2), đặt các sự kiện POLLPRI và POLLERR. Nếu bạn sử dụng chọn (2), hãy đặt bộ mô tả tệp bằng ngoại lệ. Sau thăm dò ý kiến (2) trả về, hoặc là lseek (2) vào đầu tệp sysfs và đọc giá trị mới hoặc đóng tệp và mở lại nó để đọc giá trị.
Mặc dù nó nói là "gpio42", tôi đoán điều này có thể áp dụng cho trường hợp của bạn. Nếu không, hãy bình luận trong câu trả lời của tôi.
Bạn có thể sử dụng bất kỳ thẻ nào trong số đó. Điểm ở đây là bạn mở tệp sysfs cho giá trị của dòng GPIO (ví dụ: /sys/class/gpio/gpio42/value
và sau đó chặn nó trên đó.
Thay đổi trong trạng thái dòng được báo hiệu là một điều kiện ngoại lệ chứ không phải là viết (có thể trực quan)
trong trường hợp chọn:
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
}
Lưu ý rằng không phải tất cả GPIOs được gián đoạn có khả năng Nếu GPIO?. bạn đang làm việc với không hỗ trợ ngắt (và điều này sẽ phụ thuộc vào chính xác CPU/SoC bạn đang sử dụng), bạn sẽ cần phải đọc nó periodicall y. – duskwuff
Không có nghi ngờ trường hợp điều này là đúng - đặc biệt là khi dòng GPIO được thực hiện với một bộ giải mã âm thanh hoặc ngoại vi I2C. Tuy nhiên, trong trường hợp đó, bạn sẽ không bao giờ gọi 'select()' 'pselect()', 'poll()' hoặc 'epoll()' trên chúng. ['poll()' và các anh em của nó, không thực sự là bình chọn nào cả] – marko
Xin chào @Marko Cảm ơn bạn rất nhiều vì đã trả lời. Bạn có thể vui lòng cho tôi mã mẫu để chọn bạn đã đề cập ở trên không? thực sự làm thế nào tôi đang làm là khi tôi làm echo 1> file_name, sau đó thông báo nên in. Nó sẽ rất có ích. –
- 1. select vs poll vs epoll
- 2. Win32 select/poll/eof/ANYTHING?
- 3. SELECT INTO với hơn một thuộc tính
- 4. Cách tạo thuộc tính lớp sysfs đơn giản trong Linux kernel v3.2
- 5. Mô phỏng hiệu ứng của select() và poll() trong lập trình socket kernel
- 6. Chức năng tương đương C# của select/epoll/kqueue là gì?
- 7. Thư viện tệp thuộc tính cho C (hoặc C++)
- 8. Thuộc tính danh sách LINQ cho mảng?
- 9. Truy cập trình điều khiển Linux thông qua sysfs
- 10. Bộ chọn thuộc tính CSS cho thuộc tính không trống
- 11. mô hình Django & Python lớp thuộc tính
- 12. lxml: Unknown includemode hoặc @method thuộc tính
- 13. Các trường hoặc thuộc tính chỉ đọc
- 14. JSON.parse: dự kiến tên thuộc tính hoặc '}'
- 15. JavaScript: các trường hoặc thuộc tính
- 16. after_commit cho một thuộc tính
- 17. SSMS không hiển thị hoặc kịch bản FileStream thuộc tính
- 18. ExpandProperty không hiển thị các thuộc tính khác với Select-Object?
- 19. thông số mạnh mẽ cho phép tất cả thuộc tính cho thuộc tính lồng nhau
- 20. Có tương đương epoll trong Java không?
- 21. <select> với thuộc tính kích thước: iPhone hiển thị trống
- 22. Tôi có thể áp dụng thuộc tính bắt buộc cho các trường <select> trong HTML5 không?
- 23. Tài liệu XML cho các thuộc tính phụ thuộc
- 24. Cú pháp JSON cho tên thuộc tính
- 25. ToString() cho thuộc tính lớp học?
- 26. Là 'epoll' lý do quan trọng mà Tornadoweb (hoặc Nginx) là quá nhanh?
- 27. SELECT SUM() TỪ (SELECT (SELECT())
- 28. MSBuild - Đặt thuộc tính cho giải pháp
- 29. thăm dò ý kiến so với thông tin chi tiết về epoll
- 30. Thuộc tính mới của thuộc tính ARC
nhờ @ tony-the-sư tử, Nó có nghĩa là tôi phải thăm dò ý kiến cho tập tin cạnh hoặc tập giá trị –