select (), poll () oder epoll ()? für sysfs-Attribut

8

Ich arbeite mit gpio interrupts. Ich habe eine Datei in "/ sys / class / gpio / gpio38 / value". Ich möchte eine Benachrichtigung erhalten, wenn sich das Attribut value ändert. Wie kann ich das im User-Space erreichen? Da ich bereits Informationen gesammelt habe, kann ich select (), poll () oder epoll () verwenden. Was ist also richtig für diese Anwendung? Oder schlage mir bitte vor, ob ich / proc / irq oder sowas benutzen kann. Danke:)

    
Jeshwanth Kumar N K 22.09.2012, 07:53
quelle

2 Antworten

2
___ tag123c ___ C ist eine universelle Computerprogrammiersprache, die für Betriebssysteme, Bibliotheken, Spiele und andere Hochleistungsanwendungen verwendet wird. Dieses Tag sollte bei allgemeinen Fragen zur C-Sprache verwendet werden, wie in der Norm ISO 9899: 2011 definiert. Fügen Sie ggf. ein versionsspezifisches Tag wie c99 oder c90 für Fragen zu älteren Sprachstandards hinzu. C unterscheidet sich von C ++ und es sollte nicht mit dem C ++ - Tag kombiniert werden, wenn ein rationaler Grund fehlt. ___ qstntxt ___

Ich arbeite mit gpio interrupts. Ich habe eine Datei in "/ sys / class / gpio / gpio38 / value". Ich möchte eine Benachrichtigung erhalten, wenn sich das Attribut value ändert. Wie kann ich das im User-Space erreichen? Da ich bereits Informationen gesammelt habe, kann ich select (), poll () oder epoll () verwenden. Was ist also richtig für diese Anwendung? Oder schlage mir bitte vor, ob ich / proc / irq oder sowas benutzen kann. Danke:)

    
___ tag123linux ___ LINUX FRAGEN MÜSSEN PROGRAMMIEREN VERWANDT SEIN. Verwenden Sie dieses Tag nur, wenn sich Ihre Frage auf das Programmieren mit Linux-APIs oder das Linux-spezifische Verhalten bezieht, nicht nur, weil Sie Ihren Code unter Linux ausführen. Wenn Sie Linux-Unterstützung benötigen, können Sie https://unix.stackexchange.com oder https://askubuntu.com ausprobieren ___ tag123embeddedwindux ___ Embedded Linux ist die Verwendung von Linux in eingebetteten Computersystemen wie Mobiltelefonen, Personal Digital Assistants, Media Playern, Set-Top-Boxen und anderen Geräten der Unterhaltungselektronik, Netzwerkausrüstung, Maschinensteuerung, Industrieautomatisierung, Navigationsausrüstung und Medizin Instrumente. ___ tag123epoll ___ epoll ist eine Linux 2.6 Readiness Notification API für Sockets, Pipes und spezielle Event-, Signal- und Timerdeskriptoren, die sowohl im level- als auch im flankengetriggerten Modus arbeiten können, obwohl derzeit nur das levelgetriggerte Verhalten in Übereinstimmung ist mit der Dokumentation. Im Gegensatz zu Poll oder Select skaliert epoll O (1) in Bezug auf die Anzahl der Deskriptoren und O (N) in Bezug auf die realisierten Ereignisse. ___ answer12555366 ___

Sie können jeden von ihnen verwenden. Der Punkt hier ist, dass Sie die Datei sysfs für den Wert der GPIO-Zeile öffnen (z. B. %code% und dann darauf blockieren.

Änderungen im Zeilenzustand werden eher als Ausnahmebedingung als als Schreibvorgang angezeigt (was intuitiv sein kann).

Bei Auswahl von:

%Vor%     
___ antwort12542004 ___

Ich habe etwas hier gefunden, das hilfreich sein könnte:

  

GPIO-Signale haben Pfade wie / sys / class / gpio / gpio42 / (für GPIO # 42)   und haben die folgenden Lese- / Schreibattribute:

     

"value" ... liest entweder 0 (low) oder 1 (high). Wenn das GPIO     als Ausgabe konfiguriert ist, kann dieser Wert geschrieben werden;     Jeder Wert ungleich Null wird als hoch behandelt.

     

Wenn der Pin als Interrupt-erzeugender Interrupt konfiguriert werden kann     und wenn es zum Erzeugen von Interrupts konfiguriert wurde (siehe     Beschreibung von "edge"), können Sie (2) für diese Datei abfragen und     poll (2) wird immer dann zurückgegeben, wenn der Interrupt ausgelöst wurde. Ob     Verwenden Sie poll (2), legen Sie die Ereignisse POLLPRI und POLLERR fest. Wenn du     benutze select (2), setze den Dateideskriptor in exceptfds. Nach     poll (2) gibt entweder lseek (2) an den Anfang der sysfs zurück     Datei und lesen Sie den neuen Wert oder schließen Sie die Datei und öffnen Sie sie erneut     um den Wert zu lesen.

Obwohl es sagt, dass es für "gpio42" ist, schätze ich, dass dies auf Ihren Fall zutrifft. Wenn dies nicht der Fall ist, machen Sie einen Kommentar in meiner Antwort.

    
___ tag123beagleboard ___ Das BeagleBoard ist ein extrem preiswerter, leistungsfähiger ARM Cortex-A8 (OMAP3 / DM37x / AM335x) basierter Einplatinencomputer mit geringem Stromverbrauch, der von Mitgliedern der BeagleBoard.org Community entwickelt wurde. ___ qstnhdr ___ select (), poll () oder epoll ()? für sysfs-Attribut ___
Tony The Lion 22.09.2012, 08:05
quelle
1

Sie können jeden von ihnen verwenden. Der Punkt hier ist, dass Sie die Datei sysfs für den Wert der GPIO-Zeile öffnen (z. B. /sys/class/gpio/gpio42/value und dann darauf blockieren.

Änderungen im Zeilenzustand werden eher als Ausnahmebedingung als als Schreibvorgang angezeigt (was intuitiv sein kann).

Bei Auswahl von:

%Vor%     
marko 23.09.2012 19:07
quelle